我最近不得不對一些可能未被初始化的變量(和它們的默認值是None
)進行一次小的檢查。我想出了這個:檢查是否有一個變量設置爲無
if None in (var1, var2, var3):
error_out()
雖然,在我眼裏,毗鄰美麗的,我想知道 - 這是一個好辦法做到這一點?這是的方式嗎?有沒有這種情況會產生一些意想不到的結果?
我最近不得不對一些可能未被初始化的變量(和它們的默認值是None
)進行一次小的檢查。我想出了這個:檢查是否有一個變量設置爲無
if None in (var1, var2, var3):
error_out()
雖然,在我眼裏,毗鄰美麗的,我想知道 - 這是一個好辦法做到這一點?這是的方式嗎?有沒有這種情況會產生一些意想不到的結果?
首先第一件事情:你的代碼是有效的,可讀性強,簡潔...所以它可能不是的辦法做到這一點(成語隨着時間的推移和新的語言功能的發展),但它肯定是的一個以pythonic的方式來做到這一點。
其次,只有兩個意見:
產生在Python錯誤的標準方法是raise Exceptions。當然,你可以在一個函數中包裝你的異常提升,但是由於這很奇怪,我只是想知道你是否因爲某些特定原因選擇了這個設計。由於您可以編寫自己的Exception類,所以即使是樣板代碼(例如,將錯誤消息記錄到文件中)也可以在類本身內而不是在包裝函數中。
您編寫測試的方式是這樣的:您將無法將None
作爲值分配給您的變量。現在這可能不是問題,但可能會限制您未來的靈活性。檢查初始化的另一種方式可以是簡單地不申報有問題的變量的初始值,然後做線沿線的東西:
try:
self.variable_name
except NameError:
# here the code that runs if the variable hasn't been initialised
finally:
# [optional] here the code that should run in either case
實際上,正確的,最終的實現會引發一個'Exception',非常感謝您的深刻解答和觀察。 – maligree
一個稍稍不同的方式做這將是使用the built-in all
method;然而,這也將趕上像0
或""
假十歲上下的值,可能不是你想要的東西:
>>> all([1, 2, 3])
True
>>> all([None, 1, 2])
False
>>> all([0, 1])
False
允許我在這裏留下我的兩分錢:
>>> any(a is None for a in [1,0])
False
>>> any(a is None for a in [1,0, None])
True
因此可以:
def checkNone(*args):
if any(arg is None for arg in args):
error_out()
這裏沒有新東西。只是恕我直言,也許部分any arg is None
更具可讀性
看起來不錯。 –
我認爲這很完美。 – Tadeck
對於未初始化的應用來說,這是完全正確的,因爲我們不關心像'var1 =(None,)'這樣愚蠢的角落案例。 – smci