Обработка исключений


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

Решение ошибок Python - это исключения. Возможно, вы уже видели исключение.

print(a) #error Traceback (most recent call last): File "", line 1, in NameError: name 'a' is not defined
1
2
3
4
5
6
7
печать ( а )
#ошибка
Traceback ( самый недавний вызов в прошлом ) :
Файл "<stdin>" , строка 1 , в < модуле >
NameError : название «а» это не определено
</ модуль > </ stdin >
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
В 1]:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1/0 0/0

Ой! Забыл присвоить значение переменной «а».

Но иногда вы не хотите, чтобы исключения полностью останавливали программу. Вы можете сделать что-то особенное, когда возникает исключение. Это делается в блоке try / except .

Вот тривиальный пример: предположим, вы перебираете список. Вам нужно перебрать более 20 чисел, но список составлен на основе пользовательского ввода и может не содержать 20 чисел. После того, как вы дойдете до конца списка, вам просто нужно, чтобы остальные числа интерпретировались как 0. Вот как вы можете это сделать:

def do_stuff_with_number(n): print(n) def catch_this(): the_list = (1, 2, 3, 4, 5) for i in range(20): try: do_stuff_with_number(the_list[i]) except IndexError: # Raised when accessing a non-existing index of a list do_stuff_with_number(0) catch_this()
1
2
3
4
5
6
7
8
9
10
11
12
13
def do_stuff_with_number ( n ) :
печать ( п )
def catch_this ( ) :
the_list = ( 1 , 2 , 3 , 4 , 5 )
для i в диапазоне ( 20 ) :
попробуйте :
do_stuff_with_number ( the_list [ i ])
кроме IndexError : # Возникает при доступе к
несуществующий индекс списка
do_stuff_with_number ( 0 )
catch_this ( )
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
В 1]:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1/0 0/0

Ну вот, это было не так уж сложно! Вы можете сделать это с любым исключением. Дополнительные сведения об обработке исключений см. В документации Python.

Упражнение

Обработайте все исключения! Вернитесь к предыдущим урокам, чтобы вернуть фамилию актера.