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