Давайте создадим довольно сложную трассировку стека, чтобы продемонстрировать, что мы получаем полную трассировку стека:
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)
функцию.