Python鼓励对显式类型检查进行鸭子打字。但是,有时显式检查类型很有用。
当Python库需要进行类型检查时,它应该使用断言还是异常?
def foo(bar):
assert isinstance(bar, str)
def foo(bar):
if not isinstance(bar, str):
raise TypeError
库的API是一个公共API,公共API应该明确地引发异常。但是,它不应该是库的责任来进行用户输入验证(除非它是用户输入验证库),并且期望将库设计为“错误地使用”也是不合理的。使用库的程序不会捕获TypeError异常;它将被修复为使用正确的类型调用库API。
库类型检查应该使用断言而不是引发异常吗?
答案 0 :(得分:-1)
可以通过使用-O
命令行选项运行python来停用断言评估,如果您想要比生产中更广泛地检查事物,这可能是好的。
看看https://wiki.python.org/moin/UsingAssertionsEffectively - 他们比我更了解他们并且说:
考虑放置断言的地方:
- 检查参数类型,类或值
- 检查数据结构不变量
- 检查"无法发生"情况(列表中的重复,相互矛盾的状态变量。)
- 调用函数后,确保其返回合理