Python确定是否抛出了异常(不管是否捕获到异常)

2024-04-26 14:08:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一些遗留代码编写测试,这些代码到处都是catch-all结构,比如

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异常的代码,有什么好的策略呢?你知道吗


Tags: 方法函数代码in信息forsomeall
2条回答

一个好的策略是测试可观察到的行为。由于异常被明确排除在可观察行为之外,我认为您不应该测试是否引发了异常。你知道吗

您唯一现实的选择是插入except处理程序。你知道吗

Python确实记录异常信息,可以用^{}检索,但是当函数退出(Python 2)或try语句完成(Python 3)时,该信息被清除。你知道吗

相关问题 更多 >