PYTHONL Telegram 4972
🐍 Python Gotcha: как правильно логировать необработанные исключения

В этой статье разбирают частую проблему: программа падает, но в логах — тишина. Необработанные исключения отправляются в stderr, а не в лог-файл, и вы не знаете, что пошло не так.

Пример кода:

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("app.log")
handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s"))
logger.addHandler(handler)

def divide(a, b):
return a / b

def main():
logger.info("Start")
logger.info(divide(10, 0)) # ZeroDivisionError
logger.info("End")

if __name__ == "__main__":
main()


📄 В логе:



2025-07-24 12:00:00 __main__ INFO Start


А сам ZeroDivisionError — только в консоли. Лог молчит.

Решение — использовать sys.excepthook:


import sys

def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
logger.critical("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_uncaught_exception


Теперь, если произойдёт ошибка, она попадёт в лог:



CRITICAL Uncaught exception
Traceback (most recent call last):
...
ZeroDivisionError: division by zero


📌 Вывод:
— Необработанные исключения не попадут в лог, если явно не подключить sys.excepthook
— Это особенно важно в продакшене: лог покажет, где и почему всё сломалось
— Просто и надёжно

🔗 Подробнее

@pythonl
17👍6🔥6



tgoop.com/pythonl/4972
Create:
Last Update:

🐍 Python Gotcha: как правильно логировать необработанные исключения

В этой статье разбирают частую проблему: программа падает, но в логах — тишина. Необработанные исключения отправляются в stderr, а не в лог-файл, и вы не знаете, что пошло не так.

Пример кода:

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("app.log")
handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s"))
logger.addHandler(handler)

def divide(a, b):
return a / b

def main():
logger.info("Start")
logger.info(divide(10, 0)) # ZeroDivisionError
logger.info("End")

if __name__ == "__main__":
main()


📄 В логе:



2025-07-24 12:00:00 __main__ INFO Start


А сам ZeroDivisionError — только в консоли. Лог молчит.

Решение — использовать sys.excepthook:


import sys

def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
logger.critical("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_uncaught_exception


Теперь, если произойдёт ошибка, она попадёт в лог:



CRITICAL Uncaught exception
Traceback (most recent call last):
...
ZeroDivisionError: division by zero


📌 Вывод:
— Необработанные исключения не попадут в лог, если явно не подключить sys.excepthook
— Это особенно важно в продакшене: лог покажет, где и почему всё сломалось
— Просто и надёжно

🔗 Подробнее

@pythonl

BY Python/ django








Share with your friend now:
tgoop.com/pythonl/4972

View MORE
Open in Telegram


Telegram News

Date: |

Telegram message that reads: "Bear Market Screaming Therapy Group. You are only allowed to send screaming voice notes. Everything else = BAN. Text pics, videos, stickers, gif = BAN. Anything other than screaming = BAN. You think you are smart = BAN. To view your bio, click the Menu icon and select “View channel info.” Add up to 50 administrators How to create a business channel on Telegram? (Tutorial) Just as the Bitcoin turmoil continues, crypto traders have taken to Telegram to voice their feelings. Crypto investors can reduce their anxiety about losses by joining the “Bear Market Screaming Therapy Group” on Telegram.
from us


Telegram Python/ django
FROM American