Кратко о Python — 5

Исключение — это событие, которое возникает из-за ошибки в исходных данных или в программе. При возникновении исключения выполнение программы прерывается. Однако в Python предусмотрена возможность его обработать.
python-title

<< Кратко о Python — 4

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

Исключение (исключительная ситуация) — это событие, которое возникает из-за ошибки в исходных данных или в программе. Вот примеры наиболее распространенных исключений в Python:

  • ZeroDivisionError — деление на ноль.
  • ImportError — неудачный импорт.
  • IndexError — указание индекса элемента списка/кортежа за его текущими пределами.
  • NameError — обращение к несуществующей переменной.
  • SyntaxError — синтаксическая ошибка.
  • TypeError — вызов функции с параметром недопустимого типа.
  • ValueError — вызов функции с параметром допустимого типа, но с недопустимым значением.

При возникновении исключения выполнение программы прерывается. Однако в Python предусмотрена возможность его обработать. Это как минимум позволяет вывести «человекопонятное» сообщение об ошибке.

try-except

Для обработки исключений мы используем оператор try…except. В блок try помещаем фрагмент кода, при выполнении которого может возникнуть исключительная ситуация.

Если произошло исключение, исполнение блока try прерывается и выполняется блок except. Если же исключений не было, блок except вообще не выполняется. Например:

try:
    num1 = int(input('Делимое: '))
    num2 = int(input('Делитель: '))
    print('Частное:', num1 // num2, '(ост.', num1 % num2, ')')
    print('Вычисление выполнено') 
except ZeroDivisionError:
    print('Делить на ноль нельзя!')

Если в качестве делителя ввести 0, получим результат «Делить на ноль нельзя!».

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

try:
    num1 = int(input('Делимое: '))
    num2 = int(input('Делитель: '))
    print('Частное:', num1 // num2, '(ост.', num1 % num2, ')')
except ZeroDivisionError:
    print('Делить на ноль нельзя!')
except (ValueError, TypeError):
    print("Недопустимые исходные данные!")

Если в except не указан тип, блок будет обрабатывать любое исключение:

try:
    num1 = int(input('Делимое: '))
    num2 = int(input('Делитель: '))
    print('Частное:', num1 // num2, '(ост.', num1 % num2, ')')
except:
    print('Ошибка!')

Любое исключение возвращает сообщение с описанием конкретной ошибки. Его можно использовать в обработчике, если присвоить какой-либо переменной с помощью ключевого слова as:

try:
    num1 = int(input('Делимое: '))
    num2 = int(input('Делитель: '))
    print('Частное:', num1 // num2, '(ост.', num1 % num2, ')')
except ZeroDivisionError:
    print('Делить на ноль нельзя!')
except (ValueError, TypeError) as msg:
    print("Недопустимые исходные данные!\n", msg)

finally

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

try:
    num1 = int(input('Делимое: '))
    num2 = int(input('Делитель: '))
    print('Частное:', num1 // num2, '(ост.', num1 % num2, ')')
except ZeroDivisionError:
    print('Делить на ноль нельзя!')
finally:
    print('Но мы продолжаем работать.')

Кратко о Python — 6 >>

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