10

このコードが機能しない理由を説明できる python 教祖はいますか :

def f(code_str):
    exec(code_str)

code = """
g = 5
x = [g for i in range(5)]
"""

f(code)

エラー:

Traceback (most recent call last):
  File "py_exec_test.py", line 9, in <module>
    f(code)
  File "py_exec_test.py", line 2, in f
    exec(code_str)
  File "<string>", line 3, in <module>
  File "<string>", line 3, in <listcomp>
NameError: name 'g' is not defined

これはうまくいきますが:

code = """
g = 5
x = [g for i in range(5)]
"""

exec(code)

ローカルとグローバルに関係があることはわかっています。メイン スコープから exec 関数にローカルとグローバルを渡すと問題なく動作しますが、何が起こっているのか正確にはわかりません。

Cythonのバグでしょうか?

編集: python 3.4.0 と python 3.4.3 でこれを試しました

4

3 に答える 3