检测python程序/函数/方法可以引发的异常

大家好,有没有办法’检测’什么例外功能/方法提出?示范:

def foo():
    print 'inside foo, next calling bar()'
    _bar()
    _baz()
    # lots of other methods calls which raise other legitimate exceptions

def _bar():
    raise my_exceptions.NotFound

def _baz():
    raise my_exceptions.BadRequest

所以,假设foo是我的API的一部分,我需要记录它,有没有办法获得可以从中提取的所有异常?

为了清楚起见我不想处理这些异常,它们应该发生(例如,当找不到资源或者请求格式错误时).

我正在考虑创建一些工具,以“内联”方式转换代码序列,如:

def foo():
    print 'inside foo, next calling bar()'
    # what _bar() does
    raise my_exceptions.NotFound
    # what _baz() does
    raise my_exceptions.BadRequest
    # lots of other methods calls which raise other legitimate exceptions

有没有什么可以帮助我检测到而不是导航每个方法调用? (深入到几个文件)

最佳答案 你不能用Python合理地做到这一点,原因如下:

1)Python原语并未准确记录它们可以抛出的异常. Python的精神是任何事情都可以随时抛出任何异常.

2)Python的动态特性使得完全静态分析代码变得非常困难,几乎不可能知道代码“可能”做什么.

3)各种不感兴趣的异常必须在列表中,例如,如果你有self.foo,那么它可能引发AttributeError.需要一个非常复杂的分析器来确定foo必须存在.

点赞