このコードが機能しない理由を説明できる 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 でこれを試しました