Как известно язык Python является интерпретируемым. Т.е. программа интерпретатора при каждом запуске считывает строки кода и переводит его в машинное представление. При этом выполнение кода может сопровождаться ошибочными выражениями или иначе ошибками времени выполнения . Данное обстоятельство приводит к остановке...

Обработка ошибок и исключений в Python. Часть 1

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


print(1/0)

# вывод
# ZeroDivisionError: division by zero

Так как невозможно разделить 1 на 0, то программа остановится, и больше не сможет выполняться. Таким образом, возникает ошибка ZeroDivisionError. Для обработки подобных исключений в Python используется конструкция try-except. Если известно, что операция может вызвать исключение, то можно поместить ее в данный блок.

Блок try позволяет вам проверить блок кода на наличие ошибок.

Блок except позволяет вам обрабатывать ошибку.

Блок finally позволяет выполнять код независимо от результата блоков try- и except.



>>>nums=[1,2,3]

>>>nums[3]

# вывод
# IndexError: list index out of range

Здесь в списке всего 3 элемента. Значит, у них должны быть индексы от 0 до 2. Если мы попытаемся получить доступ к элементу с индексом 3, это вызовет ошибку IndexError, и программа остановится.

Но если мы перехватим это исключение в блоке except, программа продолжит выполнение со следующего оператора.


try:
  nums[3]
except:
  print('Out of index!')

# вывод
# Out of index!

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

В блок except мы можем поместить что угодно - присваивание, вызовы функций или что угодно еще. Также можем получить информацию об исключении, которое произошло, импортировав модуль sys.


try:
  nums[3]
except:
  print('Out of index!')
  print(sys.exc_info())

# вывод
# Out of index!
# (<class 'IndexError'>, IndexError('list index out of range',), <traceback object at 0x009A2D78>)

Заключение.

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