在循环中使用 exec '继续'

kez*_*zos 3 python

任何人都可以解释为什么 usingpass在此代码中有效但continue会引发错误:SyntaxError: 'continue' not properly in loop

f = 'pass'  # Works
f = 'continue'  # Fails

for i in range(10):
    if i < 5:
        exec f
    print i
Run Code Online (Sandbox Code Playgroud)

只是为了提供一些上下文,我正在检查关键字是否可以存储在变量中:

def magic_print_i(f):
    for i in range(10):
        if i < 5:
            exec f
        if i % 3:
            continue
        print i

magic_print_i("continue")
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

因为exec不会将上下文传递给正在执行的语句。

pass可以在任何地方使用,所以上下文并不重要。continue只能在循环上下文中使用,但该上下文不可用于exec.

如果循环本身也是执行代码的一部分,只能continue在 exec 语句中使用:

f = 'for i in range(10): continue'
exec f
Run Code Online (Sandbox Code Playgroud)

换句话说,您只能使用execfor完整语句,其中单个continue( 或break) 不完整。