Перейти к основному содержимому

Python Try Except

При работе с ошибками вместе действуют четыре блока. try содержит код, который нужно проверить на наличие проблем, а except обрабатывает ошибку, если она появилась.

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


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

Ошибка, которую также называют исключением, обычно заставляет Python остановиться и вывести сообщение об ошибке.

Оператор try позволяет перехватывать такие исключения и обрабатывать их самостоятельно:

Здесь блок try завершается неудачей, поэтому Python переходит к блоку except.

Уберите блок try, и та же ошибка приведёт к аварийному завершению программы:

Пример

Переменная x не определена, поэтому блок try завершается исключением:

Prompt
Напишите программу на Python, которая использует блок try/except. Попытайтесь вывести неопределённую переменную x и перехватите исключение.
Вывод: полная программа на Python

Пример

Без окружающего блока try эта строка завершается ошибкой, потому что переменная x не определена:

Prompt
Напишите программу на Python, которая пытается вывести неопределённую переменную x. Это вызовет NameError.
Вывод: полная программа на Python

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

За одним try может следовать любое количество блоков except, что удобно, когда для определённого типа ошибки нужен свой особый код:

Пример

Выведите одно сообщение для NameError и другое — для всех остальных случаев:

Prompt
Напишите программу на Python с несколькими блоками except. Попытайтесь вывести неопределённую переменную x, перехватите отдельно NameError и остальные ошибки в общем блоке.
Вывод: полная программа на Python

Else

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

Пример

В этом блоке try ошибок не возникает, поэтому наступает очередь else:

Prompt
Напишите программу на Python с использованием try/except/else. Блок try успешно выводит "Hello", поэтому выполняется блок else.
Вывод: полная программа на Python

Finally

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

Поэтому он хорошо подходит для закрытия объектов и освобождения ресурсов:

Файловый объект не остаётся открытым, и программа может спокойно продолжить работу.

Пример

Prompt
Напишите программу на Python с использованием try/except/finally. Попытайтесь вывести неопределённую переменную x, обработайте исключение и используйте finally.
Вывод: полная программа на Python

Пример

Откройте файл и попробуйте записать в него, обрабатывая каждый шаг отдельно. В этом запуске файл не удалось даже открыть:

Prompt
Напишите программу на Python, которая пытается открыть файл и записать в него. Используйте вложенные try/except/finally, чтобы обработать ошибки работы с файлом и гарантировать, что файл будет закрыт.
Вывод: полная программа на Python

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

Иногда ваш собственный код должен сообщить о проблеме при выполнении определённого условия. Именно это делает ключевое слово raise: оно выбрасывает (вызывает) исключение.

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

Пример

Остановите программу с ошибкой, если значение x отрицательное:

Prompt
Напишите программу на Python, которая вызывает исключение. Присвойте x значение -1 и вызовите Exception, если x меньше 0.
Вывод: полная программа на Python

Пример

Вызовите TypeError, если x не является целым числом:

Prompt
Напишите программу на Python, которая вызывает TypeError. Присвойте x значение "hello" и вызовите TypeError, если x не является целым числом.
Вывод: полная программа на Python