[英]Why running exec inside function fail in python3?
運行python3代碼的結果:
------- input option 1 - exec code is executed --------
0 - for running inside function, 1 - for running in main programa: 1
option = 1
10
------- input option 0 - exec code not executed inside function ----
0 - for running inside function, 1 - for running in main programa: 0
option = 0
code inside execfunction => A = 10
Traceback (most recent call last):
File "myexec.py", line 19, in <module>
print(A)
NameError: name 'A' is not defined
---------------------Code --------------------------
myexec.py
def execfunction(icode):
print('code inside execfunction => %s' %(icode))
exec(icode)
option = int(input("0 - for running inside function, 1 - for running in main programa: "))
print('option = %d' %(option))
code = 'A = 10'
if (option == 1):
exec(code)
else:
execfunction(code)
print(A)
是因為exec是python 3中的函數,而是python 2中的語句嗎? 看看這個討論
Python編譯器在遇到print語句時將加載GLOBAL,在該處,它作為未定義變量'A'失敗。 如果您嘗試反匯編代碼[import dis],則將看到后端流程調用的執行情況。
本文在python 3中的函數中創建動態命名的變量/在python 3中了解exec / eval / locals中給出了一個很好且定義明確的解釋
如果您確實希望execfunction
在全局范圍內執行該函數,則可以執行
def execfunction(code):
exec(code, globals())
然后,這將使對execfunction
調用在全局范圍內執行,而不是僅在函數的局部范圍內執行。
供參考: https : //docs.python.org/3/library/functions.html#exec
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.