检测python程序/函数/方法可能引发的异常
是否有方法“检测”函数/方法引发的异常?举例说明:检测python程序/函数/方法可能引发的异常,python,exception,Python,Exception,是否有方法“检测”函数/方法引发的异常?举例说明: 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_ex
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的动态特性。如果一个函数在运行时选择了另一个函数(非常常见),或者代码后来被修补,那么您的工具将如何工作
根本没有办法提前知道(在足够有用的情况下),解释器将通过静态分析做什么。您必须有效地运行解释器,看看会发生什么,当然在运行之间可能会发生变化…使用Python无法合理地做到这一点,原因如下: 1) Python原语没有精确地记录它们可以抛出的异常。Python的精神是任何东西都可以在任何时候抛出任何异常 2) Python的动态特性使得静态分析代码非常困难,几乎不可能知道代码“可能”做什么
3) 所有类型的无趣异常都必须在列表中,例如,如果您有
self.foo
,那么它可能会引发AttributeError。需要一个非常复杂的分析器才能找出foo
必须存在。明白了。。。谢谢关于你的第三点:我不想要这种“检测”,我想要的只是得到所有显式引发的异常,而不是解释器可以引发的异常,比如AttributeError.wow,刚刚意识到你是Ned Batchelder,覆盖模块的幕后黑手,对吗?我想做的是受到你们模块的启发,但不是那个么复杂的呵呵。。。我同意python的动态特性使得不可能做一个百分之百正确的分析器,但它只是对提出的内容有一个大致的了解,而不是逐个方法地读取提出的内容。:)很高兴您加入团队!:)“你必须运行解释器,看看会发生什么,当然在运行之间可能会发生变化……”但这太疯狂了!在某些情况下,我无法提前知道某个时候会发生什么!