Сообщить об ошибке.

Обработка ошибок и исключений в коде Python.

Существует, как минимум, два различимых вида ошибок:

  1. синтаксические ошибки;
  2. исключения.

Синтаксические ошибки.

Синтаксические ошибки, также известные как ошибки синтаксического анализа, являются, самой распространенной проблемой пока изучаете Python:

>>> while True print('Hello world')
#  File "<stdin>", line 1
#    while True print('Hello world')
#                   ^
# SyntaxError: invalid syntax

В примере ошибка обнаружена в функции print(), так как перед ней отсутствует двоеточие ':'. Имя файла и номер строки напечатаны, чтобы вы знали, где искать, если входные данные поступили из сценария.

Парсер повторяет ошибочную строку и отображает небольшую "стрелку", указывающую на самую раннюю точку в строке, где была обнаружена ошибка. Ошибка вызвана или, по крайней мере, обнаружена токеном, предшествующим стрелке.

Исключения.

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

>>> 10 * (1/0)
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# ZeroDivisionError: division by zero

>>> 4 + spam*3
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# NameError: name 'spam' is not defined

>>> '2' + 2
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: Can't convert 'int' object to str implicitly

Последняя строка сообщения об ошибке указывает на то, что произошло. Исключения бывают разных типов, и тип печатается как часть сообщения: типы в примере - это ZeroDivisionError, NameError и TypeError. Строка, напечатанная в качестве типа исключения, является именем возникшей исключительной ситуации. Это верно для всех встроенных исключений, но не обязательно должно быть верно для пользовательских исключений, хотя это полезное соглашение. Стандартные имена исключений - это встроенные идентификаторы, не зарезервированные ключевые слова.

Остальная часть строки содержит подробности, основанные на типе исключения и причинах его возникновения.

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

Встроенные исключения перечисляют встроенные исключения и их значения.


Обработка/перехват исключений try/except в Python.

Общие приемы перехвата ошибок конструкцией try/except. Оператор try может содержать несколько предложений except, чтобы указать обработчики для различных исключений. В этом случае будет выполнен только один обработчик.

Инструкция raise, принудительный вызов исключений в Python.

Инструкция raise позволяет программисту принудительно вызвать указанное исключение.

Создание пользовательских исключений в Python.

При создании модуля, который может вызывать несколько различных ошибок, создается базовый класс для исключений и подкласс, который создает определенные классы исключений для различных условий ошибки.

Инструкция finally, очистка внешних ресурсов в Python.

Если инструкция finally присутствует, то она будет выполняться как последняя задача перед завершением выполнения конструкции try. Инструкция finally выполняется независимо от того, создает ли блок кода в операторе try исключени

Тонкости работы конструкции try/except/else/finally в Python.

В операторе try определяется обработчики исключений и/или код очистки для группы операторов.

Отладочные утверждение assert в Python.

Утверждения Assert - это удобный способ вставить отладочные утверждения в программу.