大家好,有没有办法去发现'什么例外函数/方法引发?示例性:
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
有什么能帮助我检测到而不是浏览每个方法调用吗? (深入到几个文件中)
答案 0 :(得分:4)
由于以下几个原因,你无法合理地使用Python:
1)Python原语并未准确记录它们可以抛出的异常。 Python的精神是任何事都可以随时抛出任何异常。
2)Python的动态特性使得完全静态分析代码变得非常困难,几乎不可能知道“可能”代码是什么。
3)所有类型的无趣异常都必须在列表中,例如,如果你有self.foo
,那么可以引发AttributeError。需要一个非常复杂的分析器来确定foo
必须存在。
答案 1 :(得分:3)
不,因为Python的动态特性。如果函数在运行时选择了另一个函数(很常见),或者代码后来被monkeypatched,你的工具将如何工作?
没有办法提前知道(在足够的情况下它有用),解释器将通过静态分析做什么。你实际上必须运行解释器,看看会发生什么,当然可以在运行之间改变......