Логирование ошибок

Для чтения этой статьи нужно знать о перехвате ошибок и о логировании

Чтобы перехватывать ошибки, тоже можно использовать логи. Вот как это делается:

try:
    0/0
except Exception as err:
    logging.error(err)

В логи выведется ошибка:

division by zero

Чтобы присоединить трейсбек к логу, нужно добавить аргумент exc_info:

try:
    0/0
except Exception as err:
    logging.error(err, exc_info=True)

Теперь ошибка будет с трейсбеком:

division by zero
Traceback (most recent call last):
  File "main.py", line 2, in <module>
    0/0
ZeroDivisionError: division by zero

А чтобы не писать такой код каждый раз, воспользуйтесь методом exception, он сделает то же самое, но короче и проще:

try:
    0/0
except Exception:
    logging.exception()

И помните, перехватывать все исключения с помощью Exception уместно, если пишите сайт, чат-бота или другое долгоиграющее приложение. В таком случае программа не должна останавливаться, даже если обработка одного из запросов закончилась ошибкой. Для всех остальных случаев это антипаттерн. Перехватывайте только те ошибки, которые не скажутся на работоспособности программы. Остальные исключения должны ломать программу, чтобы их быстрее заметили и исправили.

Что читать дальше?

Документацию logging и статьи с других сайтов: