№26 Try…Except / Уроки по Python для начинающих

161

Предыдущий урок: Python PIP

Блок try позволяет проверить блок кода на ошибки.
Блок except обрабатывает ошибку.
Блок finally позволяет выполнять код, независимо от результата блоков try и except.

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

Когда возникает ошибка или исключение, как его еще называют, Python обычно останавливает работу и генерирует сообщение об ошибке.

Эти исключения можно обрабатывать с помощью оператора try:
Блок try генерирует исключение, потому что x не объявлен:

try:
    print(x)
except:
    print("Ошибка")

Вывод:

Ошибка

Поскольку блок try вызывает ошибку, будет выполнен блок except. Без блока try программа остановится и вызовет ошибку:

print(x)

Вывод:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    x
NameError: name 'x' is not defined

Несколько исключений

Вы можете определить столько исключений, сколько хотите.

try:
    print(x)
except NameError:
    print("Переменная x не существует")
except:
    print("Что-то пошло не так")

Вывод:

Переменная x не существует

Else

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

try:  
    print("Привет")  
except:  
    print("Что-то пошло не так")  
else:  
    print("Ошибок не обнаружено")

Вывод:

Привет
Ошибок не обнаружено

Finally

Блок finally, если указан, будет выполняться независимо от того, возникает ошибка в блоке try или нет.

try:
    print(x)
except:
    print("Что-то пошло не так")
finally:
    print("Блок 'try except' завершен")

Вывод:

Что-то пошло не так
Блок 'try except' завершен

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

try:
    f = open("demofile.txt") # фал должен быть создан, иначе исключение FileNotFound
    f.write("Lorum Ipsum")
except: 
    print("Что-то пошло не так при записи в файл")
finally:
    f.close()

Вывод:

Что-то пошло не так при записи в файл

Программа будет работать и закроет файл.