断言
断言是作为一种调试工具被发明出来的,用来检查那些“代码写对了就肯定成立”的条件,可用if + raise语句实现同样的效果。
与异常的应用场景差异:检查先验条件使用断言,检查后验条件使用异常。
def read_file(file_path):
assert is_instance(file_path, str) # 函数执行前,对file_path的类型进行推断。
if not check_exist(file_path):
raise NotFoundError()
# file_path所指定的文件存在。if not has_privilege(file_path):
raise PermissionError()
# 当前用户有权限读取
作者认为,raise的两个条件不属于bug,是代码逻辑的一部分,上层代码捕获异常后可能会执行其他逻辑,因此我们不能接受这部分代码在生产环境中被忽略。
我倒觉得没啥区别,关键区别在于生产环境是否依赖并进行不同的逻辑判断,还是只是在编写代码时进行调试。
附,参考资料:
1、你真的会正确使用断言吗?,https://zhuanlan.zhihu.com/p/36549710