python
runtime_error
ai_generated
true
AssertionError: ValueError not raised by parse_input
ID: python/unittest-assert-raises-no-exception
80%Fix Rate
90%Confidence
0Evidence
2024-01-30First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 3.8 | active | — | — | — |
Root Cause
assertRaises expects the callable to raise the specified exception. If the function returns normally (e.g., it was fixed, or the input is valid), the context manager's __exit__ receives no exception and the test fails.
generic中文
assertRaises 期望可调用对象引发指定的异常。如果函数正常返回(例如它已被修复,或者输入有效),上下文管理器的 __exit__ 不会收到异常,测试就会失败。
Workarounds
-
97% success
def parse_input(s): if not s: raise ValueError('empty input') return int(s) # test with self.assertRaises(ValueError): parse_input('') -
96% success
import pytest def test_parse_input_empty(): with pytest.raises(ValueError, match='empty input'): parse_input('')
Dead Ends
Common approaches that don't work:
-
90% fail
assertRaisesRegex still requires the exception to be raised; an empty pattern matches anything but the exception absence still fails.
-
70% fail
Reimplements assertRaises worse; loses the informative 'ValueError not raised' message and complicates the test.