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

如何在Python unittest单元测试中正确抛出并校验异常

Python unittest异常校验正确实现方案

你的代码现有问题

  • 当前second_digit_value4函数仅会返回布尔值,无论入参是什么都不会抛出ValueError,因此assertRaises捕获不到任何异常,测试必然运行失败
  • 现有断言写法存在冗余:self.assertFalse(second_digit_value4(22), False)中第二个参数是自定义报错信息,不需要传False,直接写self.assertFalse(second_digit_value4(22))即可

实现异常校验的两种方案

方案1:给原函数增加异常抛出逻辑

如果业务要求函数在入参不符合规则时抛出异常,先给函数加校验逻辑,示例如下:

def second_digit_value4(n):
    # 自定义校验规则,不符合则抛出对应异常
    if not isinstance(n, int):
        raise ValueError("入参必须为整数")
    if n < 0:
        raise ValueError("入参不能为负数")
    return n % 10 == 4

对应的测试用例调整为传入不符合规则的入参触发异常:

def test_last_digit_value4(self):
    self.assertEqual(second_digit_value4(14), True)
    self.assertFalse(second_digit_value4(22))

    # 传入非法入参触发ValueError,符合断言要求
    with self.assertRaises(ValueError):
        second_digit_value4("23") # 传入字符串
    with self.assertRaises(ValueError):
        second_digit_value4(-23) # 传入负数

方案2:移除无必要的异常校验逻辑

如果你只是要校验合法入参的返回值,不需要函数抛异常,直接删除assertRaises相关代码即可,修改后测试用例如下:

def test_last_digit_value4(self):
    self.assertEqual(second_digit_value4(14), True)
    self.assertFalse(second_digit_value4(22))
    self.assertFalse(second_digit_value4(23))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:27:06