Я - ОП, и это, возможно, не лучший ответ, на практике или более Pythonic, но для Google, есть метод.
Как @ thebjorn , заявленный вкомментарии к вопросу, вам нужен встроенный модуль traceback .
Затем вам нужно убедиться, что целевое исключение является последним исключением, созданным вашим программным обеспечением.Затем вы можете просто позвонить:
traceback.print_last()
Если исключений нет, вы получите строку ниже:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.7/traceback.py", line 173, in print_last
raise ValueError("no last exception")
ValueError: no last exception
В противном случае вы получите трассировку последнего исключения.:
raise Exception("foo")
traceback.print_last()
# will return a string similar to below
Traceback (most recent call last):
File "/foo/bar/baz.py", line 3296, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "/foo/bar/biz.py", line 1, in <module>
raise Exception("foo")
Exception: foo
Надеюсь, что это поможет Google.
Что нужно знать
Как я уже говорил, вам нужно убедиться, последнее возникшее исключение - это исключение, на которое вы нацелены.Это не может быть жизнеспособным решением
- для многопоточной кодовой базы , потому что вы должны быть очень осторожны с тем, в каком потоке работает ваш код, или
- aкодовая база, которая структурирована на фреймворке, таком как Django , потому что обработка исключений в таких фреймворках может быть довольно сложной, и вы можете получить другое исключение, нежели то, которое вы исключали, чтобы получить