Начиная со стороны, ()
после имени класса в выражении class
совершенно правильно в современном Python - совсем не ошибка.
По сути проблемы, assertRaises(MyException, foo)
задокументировано для распространения исключений, вызванных вызовом foo()
, чей тип НЕ является подклассом MyException
- это только ловит MyException
и его подклассы. Когда ваш код вызывает исключение одного типа, а ваш тест ожидает другого типа, не связанного с этим, возникшее исключение будет распространяться в соответствии с документами модуля unittest
, здесь , и я цитирую:
Тест проходит, если исключение , возникает ошибка, если возникает другое исключение, или не выполняется, если исключение не возникает.
И «является ошибкой» означает «распространяет другое исключение».
Когда вы ловите исключение, распространяющееся в вашем блоке try / Кроме того, вы обнуляете ошибку, и unittest
ничего не остается для диагностики. Если ваша цель - превратить эту ошибку в сбой (дискуссионная стратегия ...), ваш блок except
должен вызвать self.fail
.