Створимо гідно складний стек-трек, щоб продемонструвати, що ми отримуємо повний стек-трек:
def raise_error():
raise RuntimeError('something bad happened!')
def do_something_that_might_error():
raise_error()
Реєстрація повного стека
Найкраща практика - встановити реєстратор для вашого модуля. Він буде знати назву модуля та зможе змінювати рівні (серед інших атрибутів, таких як обробники)
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
І ми можемо використовувати цей реєстратор, щоб отримати помилку:
try:
do_something_that_might_error()
except Exception as error:
logger.exception(error)
Які журнали:
ERROR:__main__:something bad happened!
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
І тому ми отримуємо такий самий вихід, як і коли ми маємо помилку:
>>> do_something_that_might_error()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
Отримання просто рядок
Якщо ви дійсно просто хочете рядок, скористайтеся traceback.format_exc
функцією замість цього, продемонструвавши тут реєстрацію рядка:
import traceback
try:
do_something_that_might_error()
except Exception as error:
just_the_string = traceback.format_exc()
logger.debug(just_the_string)
Які журнали:
DEBUG:__main__:Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
log_error(err)
функцію.