在Python是,能夠避免可變(預)聲明,以避免NameError:名稱「C」沒有定義:Python的處理未聲明的變量
a=5
if a==7:
c=10
if c: print c
在最後一行如果c:只是驗證變量'c'不是無。什麼可以用來檢查'c'變量是否存在(或者是預先聲明的)?
在Python是,能夠避免可變(預)聲明,以避免NameError:名稱「C」沒有定義:Python的處理未聲明的變量
a=5
if a==7:
c=10
if c: print c
在最後一行如果c:只是驗證變量'c'不是無。什麼可以用來檢查'c'變量是否存在(或者是預先聲明的)?
當然,首先分配None
它:
a = 5
c = None
if a == 7:
c = 10
if c:
print c
None
測試作爲False
在布爾上下文,所以if c:
仍然可以作爲書面。
你也可以趕上NameError
例外:
try:
print c
except NameError:
pass
if 'c' in locals():
# in a function
if 'c' in globals():
# outside a function
但是這只是醜陋的和不必要的。
我不知道我是否可以避免c =無預申報....還有其他建議嗎? – alphanumeric
@Sputnix:爲什麼?你可以嘗試看看'globals()'或'locals()'中是否有這個名字,但這很簡單。不應該預先分配什麼目標? –
問題是:如果您不知道名稱是否已被定義,那麼您的代碼可能存在問題。好的代碼是由小的簡單函數組成的,儘可能地避免了全局變量,所以你應該知道。如果你不這樣做,請重構你的代碼。 –
你可能會發現異常。
這在我看來似乎是最好的答案,我使用它從配置文件中檢索contants並確保它的設置正確。 –
目前尚不清楚爲什麼需要在某些情況下,而不是其他的變量,但最簡單的是把print
遷入範圍c
在分配:
if a == 7:
c = 10
print(c)
或刪除變量:
if a == 7:
print(10)
在python3,儘管馬亭認爲這是醜陋的:
如果你知道這個變量是一個全球性:
if globals().get('abc'): print (True)
如果你知道這是當地
:
if locals().get('abc'): print (True)
如果僅C存在時,第一個'if'執行,爲什麼不把'打印C'在那個'if'塊裏面? – Kevin