我正在编写一些遗留代码的测试,这些代码充斥着像
这样的全能结构try:
do_something()
do_something_else()
for x in some_huge_list():
do_more_things()
except Exception:
pass
我想知道是否在try块中抛出异常。
我想避免在代码库中引入更改只是为了支持一些测试,我不想让except
个案例更具体,因为担心会无意中引入回归。
有没有办法提取有关从运行时引发并随后处理的异常的信息?或者某些具有与eval
/ exec
/ apply
/ call
类似的API的函数,它们记录每个引发的异常的信息,让用户提供一个运行的异常处理程序首先,或者让用户注册一个回调,该回调在诸如引发或捕获的异常之类的事件上运行。
如果没有办法检测是否在没有以非常讨厌的方式进入(C)Python运行时的情况下抛出异常,那么在您单元内部使用catch-all异常测试代码的一些好策略是什么?重新测试?
答案 0 :(得分:2)
唯一可行的选择是检测except
处理程序。
Python会记录异常信息,可以使用sys.exc_info()
检索,但是当函数退出(Python 2)或try
语句完成时,此信息清除( Python 3)。
答案 1 :(得分:-1)
一个好的策略是测试可观察的行为。由于异常被明确排除在可观察行为之外,我认为您不应该测试是否引发了异常。