在 Python 中实现 “Assert Not Null”
在很多编程语言(如 Java 的 JUnit)中,通常会有内置的 assertNotNull 方法,但在 Python 中,并没有直接名为 assertNotNull 的函数,Python 的设计哲学更倾向于使用内置的 assert 语句或显式的异常处理来实现这一逻辑。
以下是在 Python 中检查变量是否为非空的最佳实践。
使用 Python 原生 assert 语句
在测试代码中,最直接的方法是使用 Python 的 assert 关键字配合 is not None。
# 推荐写法 assert variable is not None, "变量不应为 None"
为什么使用 is not None 而不是 != None?
-
性能与规范:在 Python 中,
is运算符用于比较对象的身份(Identity),而 用于比较值(Equality)。None是一个单例对象,使用is检查是最快且最符合 Python 编码规范(PEP 8)的方式。
警惕 “Truthiness” 陷阱
很多初学者习惯使用以下简写方式:
# 危险的写法 assert variable, "变量不应为空"
这种写法非常危险,因为它检查的是变量的“真值”(Truthiness),在 Python 中,以下值会被视为 False:
None0(数字零)- (空字符串)
[](空列表)- (空字典)
False
如果你使用 assert variable,当变量为 0 或空字符串时,断言也会失败,这通常不是你想要的结果。务必明确使用 is not None。
生产环境中的替代方案
重要提示:Python 的 assert 语句在运行 Python 时如果加上 -O(优化模式)参数,会被全局禁用。不要在生产环境的业务逻辑中使用 assert 进行参数校验。
在生产代码中,如果需要确保变量不为 None,应使用显式的异常抛出:
def process_data(data):
if data is None:
raise ValueError("传入的数据不能为空")
# 继续后续逻辑
return data
在 Pytest 测试框架中使用
如果你正在使用 pytest 进行单元测试,依然推荐使用标准的 assert 语句。pytest 会对 assert 语句进行重写,从而提供非常详细的错误信息。
def test_data_is_not_none():
result = get_data()
# pytest 会自动捕获并展示详细的上下文信息
assert result is not None
- 测试环境:使用
assert variable is not None。 - 生产环境:使用
if variable is None: raise ValueError(...)。 - 避免使用:
assert variable,因为它会误判0、False和空集合为None。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/488484.html



