Ошибки и встроенные исключения в Python: полное руководство
Ошибки и встроенные исключения в Python
Узнайте, как Python сигнализирует о проблемах, разницу между синтаксическими и ошибками времени выполнения, и как обрабатывать встроенные исключения уверенно.
Видео: Обработка исключений в Python
Когда вы запускаете программу на Python, интерпретатор немедленно останавливает выполнение, если встречает необработанную ошибку. Эти ошибки делятся на две большие категории:
- Синтаксические ошибки — проблемы, обнаруживаемые при парсинге.
- Логические ошибки (исключения) — проблемы, возникающие во время выполнения кода.
Синтаксические ошибки в Python
Синтаксическая ошибка возникает, когда исходный код нарушает грамматические правила Python. Интерпретатор указывает на точное место с кареткой (^) в сообщении об ошибке.
> >>> if a < 3
File "<interactive input>", line 1
if a < 3
^
SyntaxError: invalid syntax
В этом примере отсутствие двоеточия (:) после оператора if вызывает SyntaxError.
Логические ошибки (исключения) в Python
Логические ошибки, или исключения, проявляются только после того, как код прошёл проверку синтаксиса. Частые примеры:
- Попытка деления на ноль (
ZeroDivisionError) - Открытие несуществующего файла (
FileNotFoundError) - Импорт недоступного модуля (
ImportError)
Когда исключение возбуждается, Python создаёт объект исключения. Если оно остаётся необработанным, печатается трассировка стека, показывающая стек вызовов и причину сбоя.
> >>> 1 / 0
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero
> >>> open("imaginary.txt")
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'
Встроенные исключения Python
Интерпретатор Python возбуждает широкий спектр встроенных исключений для сигнализации разных условий сбоя. Их можно перечислить так:
print(dir(locals()['__builtins__']))
Ниже — краткий справочник некоторых самых часто встречающихся встроенных исключений и ситуаций, их вызывающих:
| Исключение | Причина ошибки |
|---|---|
AssertionError | Возникает при неудаче оператора assert. |
AttributeError | Возникает при неудаче присваивания или ссылки на атрибут. |
EOFError | Возникает, когда функция input() достигает конца файла. |
FloatingPointError | Возникает при неудаче операции с плавающей точкой. |
GeneratorExit | Возникает при вызове метода close() генератора. |
ImportError | Возникает, когда импортируемый модуль не найден. |
IndexError | Возникает, когда индекс последовательности выходит за границы. |
KeyError | Возникает, когда ключ отсутствует в словаре. |
KeyboardInterrupt | Возникает при нажатии пользователем Ctrl+C или Delete. |
MemoryError | Возникает, когда операция превышает доступную память. |
NameError | Возникает, когда переменная не найдена в локальной или глобальной области видимости. |
NotImplementedError | Возникает абстрактными методами, не имеющими реализации. |
OSError | Возникает для системных ошибок (например, ввод-вывод файлов). |
OverflowError | Возникает, когда арифметический результат слишком велик для представления. |
ReferenceError | Возникает, когда слабая ссылка проксирует собранный сборщиком мусора объект. |
RuntimeError | Возникает для ошибок, не подпадающих под другие категории. |
StopIteration | Возникает next(), когда итератор исчерпан. |
SyntaxError | Возникает, когда парсер встречает неверный синтаксис. |
IndentationError | Возникает при неправильной отступах. |
TabError | Возникает при смешивании табов и пробелов в отступах. |
SystemError | Возникает, когда интерпретатор обнаруживает внутреннюю ошибку. |
SystemExit | Возникает функцией sys.exit(). |
TypeError | Возникает, когда операция или функция получает объект неподходящего типа. |
UnboundLocalError | Возникает, когда локальная переменная используется до присваивания. |
UnicodeError | Возникает при ошибках кодирования/декодирования Unicode. |
UnicodeEncodeError | Возникает при ошибках кодирования Unicode. |
UnicodeDecodeError | Возникает при ошибках декодирования Unicode. |
UnicodeTranslateError | Возникает при ошибках перевода Unicode. |
ValueError | Возникает, когда функция получает аргумент правильного типа, но недопустимого значения. |
ZeroDivisionError | Возникает при делении или взятии остатка от деления на ноль. |
Если нужна более детальная настройка, Python позволяет определять пользовательские классы исключений. См. Python User‑defined Exceptions.
Обработка исключений проста с блоками try, except и finally. Для глубокого погружения см. Python try, except and finally statements.
Python
- Ключевые слова и идентификаторы в Python: мастерство зарезервированных слов и соглашений об именовании
- Операторы, отступы и комментарии в Python: понятное руководство
- Переменные, константы и литералы в Python — подробное руководство
- Мастерство преобразования типов в Python: Полное руководство
- Мастерство ввода-вывода и импорта модулей в Python: Практическое руководство
- Глобальные, локальные и nonlocal переменные в Python: понимание и применение
- Числа, преобразование типов и математика в Python: полное руководство
- Управление директориями и файлами в Python: полное руководство
- Пользовательские исключения в Python: практическое руководство
- Получение текущей даты и времени в Python: практическое руководство