簡體   English   中英

為什么在python3中的函數內部運行exec失敗?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM