断言与库API类型检查的异常

时间:2016-07-28 17:09:08

标签: python

Python鼓励对显式类型检查进行鸭子打字。但是,有时显式检查类型很有用。

当Python库需要进行类型检查时,它应该使用断言还是异常?

def foo(bar):
    assert isinstance(bar, str)

def foo(bar):
    if not isinstance(bar, str):
        raise TypeError

库的API是一个公共API,公共API应该明确地引发异常。但是,它不应该是库的责任来进行用户输入验证(除非它是用户输入验证库),并且期望将库设计为“错误地使用”也是不合理的。使用库的程序不会捕获TypeError异常;它将被修复为使用正确的类型调用库API。

库类型检查应该使用断言而不是引发异常吗?

1 个答案:

答案 0 :(得分:-1)

可以通过使用-O命令行选项运行python来停用断言评估,如果您想要比生产中更广泛地检查事物,这可能是好的。

看看https://wiki.python.org/moin/UsingAssertionsEffectively - 他们比我更了解他们并且说:

  

考虑放置断言的地方:

     
      
  • 检查参数类型,类或值
  •   
  • 检查数据结构不变量
  •   
  • 检查"无法发生"情况(列表中的重复,相互矛盾的状态变量。)
  •   
  • 调用函数后,确保其返回合理
  •