Python Try Except
При работе с ошибками вместе действуют четыре блока. try содержит код, который нужно проверить на наличие проблем, а except обрабатывает ошибку, если она появилась.
else выполняется, только если ошибки не произошло, а finally выполняется независимо от результата блоков try и except.
Обработка исключений
Ошибка, которую также называют исключением, обычно заставляет Python остановиться и вывести сообщение об ошибке.
Оператор try позволяет перехватывать такие исключения и обрабатывать их самостоятельно:
Здесь блок try завершается неудачей, поэтому Python переходит к блоку except.
Уберите блок try, и та же ошибка приведёт к аварийному завершению программы:
Пример
Переменная x не определена, поэтому блок try завершается исключением:
Вывод: полная программа на Python
try:
print(x)
except:
print("Произошло исключение")
Пример
Без окружающего блока try эта строка завершается ошибкой, потому что переменная x не определена:
Вывод: полная программа на Python
print(x)
Несколько исключений
За одним try может следовать любое количество блоков except, что удобно, когда для определённого типа ошибки нужен свой особый код:
Пример
Выведите одно сообщение для NameError и другое — для всех остальных случаев:
Вывод: полная программа на Python
try:
print(x)
except NameError:
print("Переменная x не определена")
except:
print("Что-то другое пошло не так")
Else
Добавьте ключевое слово else для кода, который должен выполняться, только если блок try не вызвал ошибок:
Пример
В этом блоке try ошибок не возникает, поэтому наступает очередь else:
Вывод: полная программа на Python
try:
print("Hello")
except:
print("Что-то пошло не так")
else:
print("Всё прошло успешно")
Finally
Блок finally, если вы его добавили, выполняется всегда — независимо от того, вызвал блок try ошибку или нет.
Поэтому он хорошо подходит для закрытия объектов и освобождения ресурсов:
Файловый объект не остаётся открытым, и программа может спокойно продолжить работу.
Пример
Вывод: полная программа на Python
try:
print(x)
except:
print("Что-то пошло не так")
finally:
print("Блок 'try except' завершён")
Пример
Откройте файл и попробуйте записать в него, обрабатывая каждый шаг отдельно. В этом запуске файл не удалось даже открыть:
Вывод: полная программа на Python
try:
f = open("demofile.txt")
try:
f.write("Lorum Ipsum")
except:
print("Что-то пошло не так при записи в файл")
finally:
f.close()
except:
print("Что-то пошло не так при открытии файла")
Вызов исключения
Иногда ваш собственный код должен сообщить о проблеме при выполнении определённого условия. Именно это делает ключевое слово raise: оно выбрасывает (вызывает) исключение.
Вы сами решаете, какой будет тип ошибки и какое сообщение увидит пользователь.
Пример
Остановите программу с ошибкой, если значение x отрицательное:
Вывод: полная программа на Python
x = -1
if x < 0:
raise Exception("Извините, числа меньше нуля не допускаются")
Пример
Вызовите TypeError, если x не является целым числом:
Вывод: полная программа на Python
x = "hello"
if not type(x) is int:
raise TypeError("Допускаются только целые числа")