Все, что вам нужно знать об ошибках и обработке исключений в Python

В Python есть 2 вида ошибок

  • синтаксические ошибки и
  • исключения.

Ошибки в Python приводят к остановке выполнения программы. Наиболее распространенными типами являются синтаксические ошибки. Синтаксическая ошибка не позволит выполнить всю программу. Рассмотрим следующую программу, которая проверяет, является ли число простым.

Если вы запустите этот файл Python, вы получите ошибку отступа

python3.8 errors.py 
  File "errors.py", line 2
    if x%2 == 0:
    ^
IndentationError: expected an indented block

Исключения

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

for x in range(25):
    print(x/0)

Если вы запустите программу, вы получите ошибку ZeroDivisionError, которая относится к подклассу исключений ArithmeticError.

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

Другим типом ошибки является NameError, следующая программа выдаст ошибку NameError.

Вот результат,

python3.8 errors.py 
Traceback (most recent call last):
  File "errors.py", line 9, in <module>
    print(str(x)+ " is a prime number" + prime)
NameError: name 'prime' is not defined

Чтобы увидеть все доступные в настоящее время исключения в Python, вы найдете более подробную информацию в документах Python.

Вызов исключений

Если мы ожидаем, что фрагмент кода может вызвать исключение, мы можем вызвать исключение в этот момент. Это остановит выполнение программы и выдаст сообщение об ошибке.

Вызов исключений применим в формах отправки пользователей. Если форма отправлена ​​неправильно, мы создадим исключение с пользовательским сообщением для пользователя.

Давайте посмотрим, как мы можем вызвать простое исключение.

Если предоставленный код недействителен, функция выдаст NotAllowedError и прекратит выполнение.

Пункты Try/Except/Else/Finally

Попробуйте/кроме

Try/Except позволит нашим программам продолжать выполняться даже при возникновении исключения. Синтаксис try/except выглядит следующим образом:

try:
    pass    
except:
    pass

Команда try/except работает следующим образом:

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

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

В коде мы проверяем, совпадают ли отправленные данные с данными из базы данных; если он совпадает, код в блоке try выполняется, и наш вывод — «Вход пользователя успешен», как показано ниже.

python3.8 errors.py 
Login user Succeeful

Если данные не совпадают, Python пропустит блок try и выполнит код в блоке exclude.

Остальное

else close следует следующему синтаксису:

try:
    pass
except:
    pass
else:
    pass

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

В приведенном выше коде два набора данных совпадают; следовательно, исключение не возникает, и выполняется предложение else. Таким образом, пользователь будет авторизован и перенаправлен на другую страницу.

python3.8 errors.py 
Login user Succeeful
user redirected

Наконец пункт

Предложение finally следует следующему синтаксису:

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

Здесь мы отправим пользователю электронное письмо, независимо от того, удастся ли ему войти в систему.

python3.8 errors.py 
Login user Succeeful
user redirected
Send the user an email

Следует также отметить, что предложение finally можно использовать без предложений else и exclude.

Пользовательские исключения

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

Допустим, у нас есть программа, которая проверяет, находится ли человек в нужном возрасте, прежде чем он сможет создать учетную запись на веб-сайте. Создайте исключение NotAllowedError, которое наследуется от встроенного класса Exception.

class NotAllowedError(Exception):
    pass

Вот как мы будем использовать его в нашей программе.

Если мы вызовем функцию с age =10 в качестве аргумента, вы получите следующую ошибку.

python3.8 errors.py 
Traceback (most recent call last):
  File "errors.py", line 74, in <module>
    schedule_delivery(20)
  File "errors.py", line 70, in schedule_delivery
    raise LocationTooFarError
__main__.LocationTooFarError

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

Использование псевдонима e позволит вам узнать, какой тип исключения был вызван.

Заключение

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

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.