當我執行爲什麼我在第二個代碼中得到UnboundLocalError,但不是在第一個代碼中?
x = 0
def f():
print('x' in locals())
x = 1
print('x' in locals())
f()
我得到了我希望,即
False
True
然而,當我執行
x = 3
def f():
print(x, 'x' in locals())
x = 7
print(x, 'x' in locals())
f()
我希望得到
3 False
7 True
但相反,我得到了UnboundLocalError
。
如果Python知道在下一行有本地作用域中標籤x
的分配(因此名稱x
已經在本地作用域中,但它尚未分配),那麼爲什麼它會讓我在我的第一個代碼中詢問x
?
新增:
爲什麼會引發錯誤,即使x = 7
來自第一print(x, 'x' in locals())
後?
只是在FYI這裏,但不要在實際代碼中使用'locals()'。或'globals()'。或'eval()'。或'exec()'。 – TigerhawkT3
第一次搜索'locals()'中的字符'「x」'。第二個函數試圖使用變量'x'然後賦值給它。如果您想使用全局版本,請指定'global x'。見http://stackoverflow.com/questions/370357/python-variable-scope-error – cdarke
@ TigerhawkT3:謝謝。我只是在嘗試學習時使用它。 – Leo