Python unittest单元测试assertRaisesRegex异常信息匹配失败问题咨询
问题根本原因
该问题和你编写的异常捕获逻辑无关,核心问题出在unittest.assertRaisesRegex的匹配规则上:
assertRaisesRegex的第二个入参是正则表达式模式,不是普通的字符串全等匹配规则。- 测试
_1+e16的用例中,待匹配的异常信息包含+符号,而+在正则语法中属于特殊量词,代表「前面的字符至少出现1次」,你没有对该符号做转义,导致正则匹配失败,单元测试报错。 - 而
_0的测试用例对应的异常信息没有任何正则特殊字符,直接写普通字符串即可匹配成功,因此测试可以正常通过。
修复方案
你可以任选以下一种方式修复测试用例:
- 手动对正则模式里的特殊字符做转义,在
+前加反斜杠\,同时用原生字符串(前缀加r)避免Python转义反斜杠:
self.assertRaisesRegex(Exception, r'Expected a string containing a float number and a unit. "_1\+e16" does not fulfil this requirement', lambda: split_value_and_unit('_1+e16'))
- 如果你不需要正则匹配能力,仅需要判断异常信息和目标字符串完全一致,可以借助
re.escape自动转义所有正则特殊字符:
import re self.assertRaisesRegex(Exception, re.escape('Expected a string containing a float number and a unit. "_1+e16" does not fulfil this requirement'), lambda: split_value_and_unit('_1+e16'))
内容的提问来源于stack exchange,提问作者user2606240
相关产品推荐
相关产品推荐

