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 用作键,因此可以在特定字典中查找这个键。下面只是一个范围有限的查找示例,并不能用来普遍检查任意变量是否为 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 块处理变量为 None 时的错误

当对 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 会比较两个值;当 value 为 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 用于处理操作引发的预期错误。了解这些区别,就能根据代码要完成的任务选择合适的方法。