应使用 is 而不是 == 判断 none,因为 none 是单例对象,is 比较内存地址,语义准确、安全高效;== 可被 eq 重载导致误判,且 pep 8 明确要求用 is none。

直接用 is None,别用 == None。
为什么必须用 is 而不是 ==
None 是单例对象,Python 中所有 None 都指向同一内存地址。用 is 是身份比较,语义准确、速度快;而 == 触发 __eq__ 方法,可能被自定义类重载,导致意外结果。
- 自定义类若重写了
__eq__,obj == None可能返回True,即使它根本不是None -
None == None虽然也返回True,但这是巧合,不是保证——比如某些 NumPy 数组或 Pandas 对象在特定版本中会让np.nan == None报错或返回False - PEP 8 明确规定:永远用
is None检查None
常见误判场景:空值、假值、未定义都≠None
新手常把“看起来是空的”等同于 None,但 None 是一个明确的对象,和其他假值(如 0、""、[])有本质区别。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
-
if not x:会把0、False、空列表也当作“真为空”,但它们不是None -
type(x) is type(None)虽然技术上可行,但冗余且不必要——x is None更直接、更安全 - 函数没写
return时默认返回None,但显式返回0或""就不是None,不能混用判断逻辑
在类型提示和运行时检查中如何配合使用
静态类型检查(如 mypy)和运行时行为要一致。类型注解里写 Optional[str],意味着变量可能是 str 或 None,此时运行时必须用 is None 分支处理。
- 错误示范:
if x == None:→ mypy 不报错,但运行时可能出问题 - 正确写法:
if x is None:→ 类型检查器能更好推导后续分支类型 - 如果需要同时排除
None和空字符串,应拆成两个判断:if x is not None and x != "",不要合并为if x
最易忽略的一点:第三方库(尤其是数据库驱动或序列化工具)有时会把缺失字段转成 None,有时转成 NULL 对象或空字符串——不能只靠直觉,得看文档,再决定是否真要用 is None 判断。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










