【发布时间】:2015-02-28 10:05:28
【问题描述】:
正如Python wiki 中所建议的,断言对
- 检查参数类型、类或值
- 检查数据结构不变量
- 检查“不可能发生”的情况(列表中的重复项、相互矛盾的状态变量)
- 调用函数后,确保其返回合理
但是,使用断言和使用“if”语句并引发异常之间的界限在哪里?
例如。
def some_domain_operation(user, invoice):
assert isinstance(user, (User, int))
# Do something.
对
def some_domain_operation(user, invoice):
if not isinstance(user, (User, int)):
raise ValueError()
# Do something.
我认为使用断言是不可靠的(可能会被用户禁用),所以我不能举一个很好的例子,当使用断言比在raise next 中使用显式“if”更好时。
您对 Pn python 断言有何看法。他们是拐杖吗?
【问题讨论】:
-
第二个例子是
TypeError,而不是ValueError。 -
我的看法/我被教导的方式是,当您希望应用程序从错误中恢复时使用异常,而断言用于在某些不应该中断的情况下杀死您的程序, 休息。所以一个完美编写的程序仍然可以抛出/捕获异常,但绝不应该使断言失败。
-
帕德莱克·坎宁安,谢谢。
标签: python assertions duck-typing