Исключения
Работа с исключениям это отдельное искусство, освоив которое вы получите инструмент огромного потенциала. Я продемонстрирую несколько методов работы с исключениями в этой главе.
В конечном итоге, нас интересует синтаксис try/except
. Код, который может вызвать исключение, помещается в try
блок, обработка исключения - в except
. Простой пример:
В примере выше мы перехватываем только исключение IOError
. Многие новички не знают, что мы можем обрабатывать несколько исключений.
Обработка множества исключений
Мы можем использовать три метода обработки множества исключений. Первый заключается в создании кортежа из всех возможных исключений. Что-то подобное:
Другой методы заключается в обработке каждого исключения в отдельном блоке except
. Мы можем иметь неограниченное их число (но не менее одного). Очередной пример:
Таким образом, если исключение не перехватывается первым блоком except
, то оно может быть обработано следующим, или не быть обработанным вовсе. Последний метод заключается в перехвате ВСЕХ исключений:
Это может быть полезно, когда вы не знаете какие исключения могут возникнуть в вашей программе.
finally
finally
Основной код помещается в блок try
. Дальше идут блоки except
, которые исполняются, если в блоке try
было вызвано определённое исключение. Третьим типом блоков, следующим за двумя первыми, может быть finally
. Код в блоке finally
будет исполнен вне зависимости от того, вызвал ли код в блоке try
исключение или нет. Это может быть полезно для финальной "чистки" после работы основного скрипта. Вот простой пример:
try/else
try/else
Иногда мы можем захотеть исполнить определенный код, если исключения не было. Это легко сделать с помощью блока else
. Вы можете спросить: почему нам нужен else
, если мы можем поместить этот код в блок try
? Проблема в том, что исключение в этом коде, может быть в свою очередь поймано try
, а мы можем этого и не хотеть. В целом, else
нечасто используется, и я, честно говоря, редко к нему прибегаю сам. Пример:
Блок else
, таким образом, исполняется при отсутствии исключений в блоке try
. else
исполняется перед finally
.
Last updated