Skip to content

Обработка исключений в Python, используя Try, Except, Else и Finally

Пересказ статьи Achyut Tripathi. Python Exception Handling using Try, Except, Else and Finally


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

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

Различные недостатки всегда будут возникать при программировании. За некоторые проблемы отвечает наш код, например, за синтаксические ошибки. В большинстве случаев такую неточность называют багом. Недостатки должны исправляться.

Даже программа, не имеющая багов, может иметь проблемы, поскольку не все недостатки бывают вызваны кодом. Они могут быть результатом непредусмотренных событий или процедур. Такой тип проблем называется исключениями. Например:

  • Диск может быть заполнен во время записи данных в файлы и препятствовать дальнейшей записи.

  • Неожиданно обрушилась сеть во время загрузки той или иной информации.

  • Использование 0 в знаменателе при делении.

Разница между ошибкой и исключением


Есть два типа ошибок в Python, которые мы должны хорошо понимать. Один тип - это синтаксические ошибки (или ошибки парсинга). При парсинге программы будет обнаружен ошибочный оператор. Ошибки этой природы не могут быть исправлены во время выполнения программы и требуют исправления кода.

Ошибки исключения - еще один тип ошибок, с которыми мы сталкиваемся. Эти ошибки имеют место, когда наш код синтаксически верен, но возникают непредвиденные ситуации при выполнении программы. Они относятся ко времени исполнения и не всегда смертельны. Далее в статье мы сосредоточимся на этих видах ошибок.

Типы ошибок


Синтаксические ошибки


Расположение букв и символов в коде называется синтаксисом. Поэтому, если вы встречаете синтаксическую ошибку, это обычно означает, что в вашем коде пропущен символ или буква. Python будет часто информировать вас о строке и местоположении проблемы. Сообщение об ошибке следует читать очень внимательно.

Блок кода:

num1 = 2
num2 = 3
Num3 = num1 num2
print(num3)


Вывод:



Ошибка нехватки памяти


Если вы получаете сообщение об ошибке памяти, вашему программному обеспечению не хватает памяти. Это говорит о том, что ваше ПО создает слишком много объектов. Memory Error сигнализирует о нехватке доступной памяти для выделения интерпретатором вашему приложению Python. Это может быть проблемой конфигурирования Python или проблемой, связанной с функцией загрузки многих конкурирующих за ресурсы данных.

Ошибка рекурсии


Когда интерпретатор Python при выполнении вашей программы превышает предел рекурсии, возникает исключение Python Recursion Error. Предел рекурсии в Python может быть увеличен, или ваш код может быть переделан, чтобы использовать итерацию, а не рекурсию, чтобы избавиться от этой ошибки.

Блок кода:

def abc():
return abc()
abc()


Вывод:



Ошибка отступа


Python является процедурным языком, поэтому если вы не поместите табулятор или пробелы между строкам вашего кода, то, вероятно, получите ошибку Indentation Error.

Блок кода:

for i in range(3):
print(i)


Вывод:



Что такое обработка исключений в Python?


Вы можете с удобством обслуживать исключения, благодаря встроенной в Python системе обработки исключений. Это механизм try...except...finally.

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

Обычные типы исключений в Python


Ошибка атрибута


Ошибки, связанные со ссылками на атрибуты или присвоением.

Блок кода:

arr = [1,2,3,4,5]
arr.len()


Вывод:



Ошибка индекса


Ошибка возникает, когда индекс последовательности выходит за границы.

Блок кода:

arr = [1,2,3,4,5]
print(arr[200])




Ошибка деления на нуль


Когда целое делится на 0, возникает Zero Division Error.

Блок кода:

arr = 1
arr = 0
print(a/b)


Вывод:



Ошибка типа


Эта ошибка возникает, когда в операции или методе используется объект неправильного типа.

Блок кода:

arr = [1,2,3,4,5]
arr.insert(1)


Вывод:



Ошибка значения


Эта ошибка возникает, когда функция получает аргумент правильного типа, но неверное значение.

Блок кода:

import math
math.sqrt(-33)


Вывод:



Ошибка имени


Эта ошибка возникает, когда идентификатор не находится ни в локальном, ни в глобальном пространстве имен.

Блок кода:

print(Num)

Вывод:



Ошибка ключа


Эта ошибка возникает, когда словарь не включает заданный ключ.

Блок кода:

dic={"name":"achyut","age":20}
print(dic["value"])


Вывод:



Ошибка импорта


Эта ошибка возникает, когда модуль не может быть загружен оператором import.

Блок кода:

from math import add

Вывод:



Предложение Try и оператор Except


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

Синтаксис


try:
#возможный блок кода, который может вызвать исключение
except Exception:
#Код, который реагирует на возникающую ошибку


Замечание. Один блок try может обрабатывать множество блоков except для различных исключений.

Наша программа стартует в блоке try и начинает выполнение. Если возникает исключение, создается объект типа Exception, обрабатывается и перехватывается блоком except. После завершения блока try и при отсутствии исключений блок except пропускается и выполняется следующий оператор, если он есть. В противном случае программа завершается нормально.

Пример


a = input ("enter the Numerator:")
b = input ("enter the Denominator:")
try:
res = int(a) / int(b)
print ('result is:', res)
except ZeroDivisionError as e:
print ('exception is:', e)


Вывод:



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

Ошибки могут быть разнообразными. Следует использовать различные блоки except для обработки возникающих ошибок различного вида. Конечно, можно перехватить более одного типа ошибок.

Try с предложением Finally


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

Пример блока Finally


Блок кода:

a = input ("enter the Numerator:")
b = input ("enter the Denominator:")
try:
res = int(a) / int(b)
print ('result is:', res)
except ZeroDivisionError as e:
print ('exception is:', e)
finally:
print ("thank you")


Вывод:



Try с предложением Else


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

Пример блока Else


Блок кода:

a = input ("enter the Numerator:")
b = input ("enter the Denominator:")
try:
res = int(a) / int(b)
print ('result is:', res)
except ZeroDivisionError as e:
print ('exception is :', e)
else:
print("hello")
finally:
print ("thank you")


Вывод:



Захват конкретных исключений в Python


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

Пример


Блок кода:

def name_exception():
try:
value = "achyut tripathi"
return xyz
except NameError:
return "NameError occurred"

print(name_exception())


Вывод:



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


В некоторых обстоятельствах мы должны выполнить пользовательскую логику, чтобы остановить операцию с помощью уникальной ошибки или исключения. Пользовательское исключение, которое будет обрабатывать блок «try-except», может использоваться, чтобы вызвать завершение исполнения.

Пример


Создадим небольшую функцию, которая ожидает число между 1 и 50. Если функция получает значение за пределами этого диапазона, работа приложения будет прервана с помощью пользовательского исключения.

Блок кода:

def range_function(range):
try:
if range > 50 or range <0:
raise Exception()
if range < 100 and range > 0:
print("Range is ok")
except:
print("Exception Occurred")
range_function(150)


Вывод:



Заключение


Примеры в этом руководстве показывают как использовать в Python блок "try-except-finally".

Когда ваш код попадает в производственную среду, обработка ошибок — отличный способ гарантировать, что он ориентирован на будущее. Конечно, юнит-тестирование и реализация ООП также важны. Избегайте слишком большого числа блоков try и except, поскольку это несколько замедлит выполнение вашего кода и в целом его потребуется больше написать. Старайтесь не использовать его, если это не является абсолютно необходимым, например, когда требуется ввод данных пользователем или открывается файл.

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.