Исключения Python

Важно иметь способ обрабатывать ошибки.

Python предоставляет нам обработку исключений.

Если вы заключите строки кода вtry:блокировать:

try:
    # some lines of code

В случае возникновения ошибки Python предупредит вас, и вы сможете определить, какой тип ошибки произошел, с помощьюexceptблоки:

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except <ERROR2>:
    # handler <ERROR2>

Чтобы поймать все исключения, вы можете использоватьexceptбез какого-либо типа ошибки:

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except:
    # catch all other exceptions

Вelseблок запускается, если не было обнаружено исключений:

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except <ERROR2>:
    # handler <ERROR2>
else:
    # no exceptions were raised, the code ran successfully

Аfinallyблок позволяет выполнять какую-либо операцию в любом случае, независимо от того, произошла ошибка или нет

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except <ERROR2>:
    # handler <ERROR2>
else:
    # no exceptions were raised, the code ran successfully
finally:
    # do something in any case

Конкретная ошибка, которая может произойти, зависит от выполняемой вами операции.

Например, если вы читаете файл, вы можете получитьEOFError. Если вы разделите число на ноль, вы получитеZeroDivisionError. Если у вас есть проблема с преобразованием типа, вы можете получитьTypeError.

Попробуйте этот код:

result = 2 / 0
print(result)

Программа завершится с ошибкой

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    result = 2 / 0
ZeroDivisionError: division by zero

and the lines of code after the error will not be executed.

Adding that operation in a try: block lets us recover gracefully and move on with the program:

try:
    result = 2 / 0
except ZeroDivisionError:
    print('Cannot divide by zero!')
finally:
    result = 1

print(result) # 1

You can raise exceptions in your own code, too, using the raise statement:

raise Exception('An error occurred!')

This raises a general exception, and you can intercept it using:

try:
    raise Exception('An error occurred!')
except Exception as error:
    print(error)

You can also define your own exception class, extending from Exception:

class DogNotFoundException(Exception):
    pass

pass here means “nothing” and we must use it when we define a class without methods, or a function without code, too.

try:
    raise DogNotFoundException()
except DogNotFoundException:
    print('Dog not found!')

More python tutorials: