You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

unittest中AssertRaises无法在try-except块中正确捕获异常

问题解答

没错,就是你的except块先捕获了ValueError,导致assertRaises无法捕获异常——异常在divide函数内部就被处理掉了,根本没向外抛出。

要同时保留try-except块和让测试能捕获异常,你需要在捕获异常后重新抛出它,具体修改方式如下:

修改后的divide函数代码

def divide(x,y):
    try:
        if y == 0:
            raise ValueError("Can't divide by zero yo!")
        return x/y
    except ValueError as e:
        print("Error my dude!")
        raise  # 重新抛出捕获的异常,让外部能接收到

关键说明

  1. 把原来的except:(捕获所有异常)改成except ValueError as e:,只捕获我们关心的除以零异常,避免意外拦截其他类型的异常。
  2. 在print处理完后添加raise语句,这会把当前捕获的异常重新抛出去,这样外部的assertRaises就能检测到这个ValueError了。

原来的代码中,except块捕获异常后直接执行print就结束了函数,函数会默认返回None,外部完全看不到异常,所以测试会失败。修改后既保留了内部的错误提示逻辑,又能让测试正常验证异常是否抛出。

内容的提问来源于stack exchange,提问作者Tigrillobag99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:55:25