HOWTO · Python

如何在 Python 中檢查變數是否為 None

了解如何在 Python 中檢查變數是否為 None,並選擇適合的判斷方式。

本頁內容

Python 的 None 值表示沒有值。它和 0、False 以及空字串都不同。若要確認變數是否持有 None,請使用 value is None;若要判斷相反情況,則使用 value is not None。

使用 is 運算子檢查 Python 變數是否為 None

None 是單例,也就是說,整個 Python 程序中只有一個 None 物件。is 運算子會檢查兩個參照是否指向同一個物件,因此是直接檢查 None 的建議寫法。以下範例展示兩種條件:

value = None

if value is None:
    print("The value is None")
else:
    print("The value is not None")

if value is not None:
    print("A value is present")
else:
    print("No value is present")
The value is None
No value is present

若只有在值存在時才要繼續執行,例如呼叫該值的方法,可以使用第二種寫法。身分比較也能避免把真值為假的其他物件誤認成 None。

使用 isinstance() 函式檢查 Python 變數是否為 None

isinstance() 會檢查物件是否屬於指定型別,並回傳布林值。由於 type(None) 是 NoneType,可以用以下運算式檢查該型別:

value = None
print(isinstance(value, type(None)))
True

當你確實需要檢查型別時,這種寫法很合適;但若只是要直接檢查是否為 None,value is None 更簡潔,也直接表達了要比較物件身分的意圖。

使用字典檢查 Python 變數是否為 None

字典可以將 None 作為鍵,因此可以在特定字典中查找這個鍵。這只是範圍有限的查找範例,不能用來通用地檢查任意變數:

value = None
messages = {None: "The value is None"}

if value in messages:
    print(messages[value])
else:
    print("No matching key")
The value is None

這個條件是在詢問 value 是否符合 messages 中的某個鍵。只有因為這個字典含有 None,而且範例正是為此用途設計,才能由此判斷值為 None。一般要檢查變數時,請改用 is None。

使用 try 和 except 區塊檢查 Python 變數是否為 None

當某個值(例如 None)可能使操作失敗時,例外處理很有用;它本身不會直接檢查變數。舉例來說,將 None 加到整數上會引發 TypeError。請捕捉預期的特定錯誤,不要使用不指定類型的 except,以免掩蓋無關問題。

value = None

try:
    result = value + 5
except TypeError:
    print("This operation needs a numeric value")
This operation needs a numeric value

這種寫法是在回應加法失敗。如果程式邏輯需要判斷變數是否為 None,請在執行操作前明確檢查。

使用相等運算子(==)檢查 Python 變數是否為 None

value == None 會比較值,當值為 None 時結果為 True。不過,物件可以自訂相等比較的行為,因此用相等比較來辨識 None 單例並不明確。一般的值,例如 0、False、"" 和 [],都不會與 None 相等;它們的真值狀態不會讓它們變成 None。建議使用 value is None 進行這項檢查。

結論

若要直接檢查 Python 變數是否持有 None,請使用 value is None;需要判斷相反情況時,則用 value is not None。isinstance(value, type(None)) 可用於型別檢查;字典成員檢查只適用於特定字典;try/except 則適合處理操作預期會引發的錯誤。了解這些差異,就能依照程式中的需求選擇合適的方法。