Гид по технологиям

Как печатать ошибки в Python с помощью try/except

4 min read Python Обновлено 06 Dec 2025
Печать ошибок в Python через try/except
Печать ошибок в Python через try/except

Краткое введение

Скриншот редактора кода с консолью Python

Чтобы код работал надёжно, нужно обнаруживать и обрабатывать ошибки. В Python для этого применяют конструкции try/except и выводят информацию об исключениях. Этот материал объяснит основные подходы, когда они полезны и какие есть альтернативы.

Останавливают ли исключения выполнение программы?

Это зависит от типа ошибки. В большинстве случаев, если возникает непредвиденное исключение (например, NameError, SyntaxError или ValueError), выполнение текущего потока кода прерывается и программа завершится с трассировкой стека, если исключение не перехвачено.

Важно: синтаксические ошибки (SyntaxError) обнаруживаются при разборе кода и не могут быть пойманы обычным try/except в рантайме. Для них нужен другой подход (например, проверка синтаксиса с ast.parse).

Как использовать try/except и печать ошибок в Python

1. Простая конструкция try/except

Инструкция: откройте файл в редакторе и добавьте минимальный блок обработки.

try:
    print("Значение переменной x:", x)
except:
    print("Произошла ошибка")

Запуск такого кода выведет сообщение об ошибке вместо падения программы. Это полезно для быстрых скриншотов и простых скриптов, но не даёт подробностей об ошибке.

Иллюстрация базового try/except в редакторе

2. Получение описания исключения

Чтобы увидеть текст ошибки, сохраните её в переменной через as и выведите:

try:
    print("Значение переменной x:", x)
except Exception as error:
    print("Произошла следующая ошибка:", error)

Этот способ печатает сообщение исключения и полезен на этапах отладки или в небольших проектах. Он не показывает трассировку стека — только описание ошибки.

Пример вывода текста исключения в терминале

3. Использование модуля traceback для полной трассировки

Для диагностирования полезно вывести полную трассировку стека. Пример:

import traceback

try:
    open("randomfile.txt")
except Exception:
    print(traceback.format_exc())

format_exc() вернёт строку с полным стек-трейсом: имя исключения, сообщение и цепочку вызовов с номерами строк. Вместо format_exc() можно использовать traceback.print_exc() для прямого вывода в stderr, или traceback.print_stack() чтобы увидеть текущую стэк-цепочку вызовов.

Трассировка стека и информация о файле и строке

Разница между print и raise

  • print — только выводит текст ошибки и, возможно, часть контекста. Он не меняет поведение программы.
  • raise — генерирует (или повторно возбуждает) исключение. С помощью raise вы можете создавать собственные типы исключений, передавать содержательную информацию и контролировать поток выполнения.

Используйте print/traceback для отладки. Используйте raise для контроля ошибок в API и библиотечных интерфейсах.

Когда простой try/except не подходит (примеры неудач)

  • Синтаксические ошибки (SyntaxError) не перехватываются обычным try/except во время выполнения.
  • Широкий except без фильтрации (except: или except Exception) может скрыть ошибки, которые вы не заметите, и затруднить отладку.
  • Поглощение исключений без логирования или реакции приводит к тихим ошибкам и неверному поведению.

Пример плохой практики:

try:
    do_critical_work()
except:
    pass  # ошибка скрыта — приложение продолжит работать в неконсистентном состоянии

Альтернативные подходы и лучшие практики

  • Используйте конкретные типы исключений: except ValueError: или except FileNotFoundError:.
  • Комбинируйте логирование и raise: логируйте подробности, затем повторно возбуждайте исключение, если нужно, чтобы внешний код обработал его.
  • Для приложений используйте модуль logging вместо print. Logging поддерживает уровни (DEBUG, INFO, WARNING, ERROR, CRITICAL) и перенаправление в файлы.
  • Контекстные менеджеры и finally помогают гарантировать освобождение ресурсов.

Пример: логирование плюс повторное возбуждение

import logging

try:
    process_data()
except ValueError as e:
    logging.exception("Ошибка при обработке данных")
    raise

Мини-методология: как быстро диагностировать ошибку в скрипте

  1. Запустите код и прочитайте текст исключения.
  2. Если нужно — выведите traceback.format_exc() или logging.exception.
  3. Ограничьте область поиска с помощью print/логов в ключевых местах.
  4. Напишите или запустите тест, который воспроизводит ошибку.
  5. После исправления добавьте тесты и логирование.

Ментальные модели и эвристики

  • «Fail fast»: позволяйте ошибкам проявляться там, где их легче исправить.
  • «Не скрывайте исключения»: лучше явно обработать или повторно поднять, чем поглощать.
  • «Уровни ответственности»: код высокого уровня (контроллеры, UI) должен логировать и показывать пользователю понятное сообщение. Код низкого уровня (библиотеки) должен возбуждать специфичные исключения.

Рольовые чек-листы

Для разработчика:

  • Использовать конкретные исключения.
  • Логировать с контекстом.
  • Не подавлять исключения молчанием.

Для оператора/инженера поддержки:

  • Проверить логи с уровнями ERROR/CRITICAL.
  • Найти трассировку и номер строки.
  • При необходимости собрать дамп или включить расширенное логирование.

Короткий словарь

  • Исключение — объект ошибки, который прерывает нормальный поток выполнения.
  • traceback — текстовая информация о стеке вызовов в момент ошибки.
  • raise — оператор для генерации исключения.

Примеры ошибок и связанные статьи

При работе с Python вы можете встретить разные ошибки: ImportError, PermissionError [Errno 13], ошибки при сборке пакетов (например, python setup.py bdist_wheel) или ошибки с отсутствующим аргументом _xsrf при POST. Для каждого случая полезно читать специализированные руководства.

Заключение

Печать ошибок через try/except проста и работает для быстрой отладки. Для надёжных приложений комбинируйте перехват исключений с логированием, используйте конкретные типы исключений и при необходимости поднимайте их повторно. Модуль traceback даёт полную трассировку и ускоряет поиск причины.

Важно: не скрывайте ошибки без причины. Пишите тесты и добавляйте логирование, чтобы повторное появление ошибки было легче диагностировать.

Поделитесь в комментариях — как вы обычно выводите или логируете исключения в своих проектах?

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

WhatsApp на стационарном номере: как подключить
Техподдержка

WhatsApp на стационарном номере: как подключить

Ошибка Out of memory в WhatsApp Web — исправление
Техподдержка

Ошибка Out of memory в WhatsApp Web — исправление

Управление сообществом WhatsApp — практичное руководство
Руководство

Управление сообществом WhatsApp — практичное руководство

Сброс сетевых настроек Android — инструкция
Android.

Сброс сетевых настроек Android — инструкция

Настройка KeepSolid VPN Unlimited на Windows 10
Безопасность

Настройка KeepSolid VPN Unlimited на Windows 10

Восстановление удалённой ОС Windows и загрузки
Windows

Восстановление удалённой ОС Windows и загрузки