Обработка исключений в Python (try: except: finally)

Обработка исключений в Python (try: except: finally)

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

Теория

Программа, написанная на языке Python, останавливается сразу как обнаружит ошибку. Ошибки могут быть (как минимум) двух типов:

  • Синтаксические ошибки — возникают, когда написанное выражение не соответствует правилам языка (например, сложение строки и числа)
  • Исключения — возникают во время выполнения программы (например, при делении числа на ноль).

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

Как устроен механизм исключений?

В Python есть встроенные исключения, которые появляются после того как приложение находит ошибку. В этом случае текущий процесс временно приостанавливается и передает ошибку на уровень вверх до тех пор, пока она не будет обработано. Если ошибка не будет обработана, то программа прекратит свою работу.

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

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

Обработка исключений в Python (try: except: finally)
Обработка исключений в Python (try: except: finally)

Программа не может конкатенировать число и строку, тем самым мы вызовем исключение 'TypeError'.

TypeError — тип ошибки, означающий, что операция не может быть выполнена с переменной данного типа.

Так как в данном примере мы еще не обработали данную ошибку, то вся информация по ошибке отобразится в консоли в виде Traceback.

Traceback - это отчёт, содержащий вызовы функций, выполненные в определенный момент. Трассировка помогает узнать, что пошло не так и в каком месте произошло.

В Python ошибку можно перехватить, обработать, и продолжить выполнение программы — для этого используется конструкция try ... except ....

Давайте обработаем нашу ошибку с помощью данной конструкции.

Для этого в try мы пишем наш кусок программы, который мы писали ранее, а далее мы пишем exect и указываем конкретный тип исключения после (чтобы перехватывать и обрабатывать конкретные исключения). В нашем случае мы указываем TypeError:

Обработка исключений в Python (try: except: finally)
Обработка исключений в Python (try: except: finally)

Также данным методом можно обрабатывать и ошибки другого типа:

Обработка исключений в Python (try: except: finally)
Обработка исключений в Python (try: except: finally)

Однако если вы хотите перехватывать все исключения, которые сигнализируют об ошибках программы, используйте тип исключения под название Exception:

Обработка исключений в Python (try: except: finally)
Обработка исключений в Python (try: except: finally)

Finally

Раздел finally позволяет обеспечить обязательное выполнение неких заключительных операций, вроде освобождения ресурсов, независимо от факта возникновения исключений.

Давайте откроем файл и обратимся к несуществующей строке:

Обработка исключений в Python (try: except: finally)
Обработка исключений в Python (try: except: finally)

Даже после исключения "IndexError", сработал код в секции finally, который закрыл файл.

Также можно использовать одновременно три блока try/except/finally. В этом случае:

  • в try — код, который может вызвать исключения;
  • в except — код, который должен выполниться при возникновении исключения;
  • в finally — код, который должен выполниться в любом случае.

Else

Иногда нужно выполнить определенные действия, когда код внутри блока try не вызвал исключения. Для этого используется блок else.

Допустим нужно вывести результат деления двух чисел и обработать исключения в случае попытки деления на ноль:

Обработка исключений в Python (try: except: finally)
Обработка исключений в Python (try: except: finally)
Обработка исключений в Python (try: except: finally)

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

Несколько блоков except

В программе может возникнуть несколько исключений, например:

  • Ошибка введенных значений к типу float.
  • Деление на ноль.

Чтобы по-разному обрабатывать разные типы ошибок, создают несколько блоков except:

Обработка исключений в Python (try: except: finally)
Обработка исключений в Python (try: except: finally)
Обработка исключений в Python (try: except: finally)

Теперь для разных типов ошибок мы умеем делать свой обработчик.

Несколько исключений в одном блоке except

Можно обрабатывать в одном блоке except сразу несколько исключений. Для этого они записываются в круглых скобках, через запятую сразу после ключевого слова except:

Обработка исключений в Python (try: except: finally)
Обработка исключений в Python (try: except: finally)

Пропуск ошибки

Иногда бывает, что ошибку обрабатывать не нужно. В этом случае ее можно пропустить с помощью pass:

Обработка исключений в Python (try: except: finally)
Обработка исключений в Python (try: except: finally)

Подписывайтесь на канал, тут каждый день выходят новые уроки.

Все уроки, а также коды с уроков вы можете найти в моем telegram канале.

Также каждый день в telegram канале появляются полезные книги и пособия с материалом по программированию, а также выходят эффективные фишки, которые значительно упрощают вашу работу с программированием.

44
Начать дискуссию