Нет активного исключения для ререйза

Краткая предыстория. Я должен выполнить несколько юнит-тестов. Единственная проблема заключается в том, что клиент хочет, чтобы о неудачных тестах сообщалось в виде текстового документа с некоторой дополнительной информацией, которую я могу легко добавить. То, что я сделал до сих пор, это.

Я написал небольшую функцию, которая будет писать вещи в текстовом документе, используя python-docx. Идея заключалась в том, что я поймаю исключение, выданное assertEqual. В блоке catch я вызову свою функцию для записи материала в документ word, а затем снова вызову исключение, чтобы все еще происходило старое поведение неудачного модульного теста.

class MyTestCase(unittest.TestCase):
    def test_something(self):
        try:
            x = 1
            y = 2
            self.assertEqual(x, y)
        except AssertionError:
            writeToDocument(x, y, self.id().split('.')[-1], 'These values should be equal')
            raise

if __name__ == '__main__':
    unittest.main()

По крайней мере, так я и думал. Я думаю, что что-то упустил. Я вижу эту ошибку при запуске теста. Эта ошибка возникает в момент, когда я вызываю исключение после вызова моего метода документации.

RuntimeError: No active exception to reraise

Любые идеи, где я возиться с вещами обработки исключений?

1 ответ

Решение

Если он как-то теряет ссылку на ошибку, попробуйте передать ее явно, используя except AssertionError as err,

class MyTestCase(unittest.TestCase):
    def test_something(self):
        try:
            x = 1
            y = 2
            self.assertEqual(x, y)
        except AssertionError as err:
            writeToDocument(x, y, self.id().split('.')[-1], 'These values should be equal')
            raise err

if __name__ == '__main__':
    unittest.main()
Другие вопросы по тегам