НачатьНачать бесплатно

Перехват исключений

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

В этом упражнении вам дана функция invert_at_index(x, ind), которая принимает два аргумента: список x и индекс ind, и возвращает значение, обратное элементу списка с данным индексом. Например, invert_at_index([5,6,7], 1) возвращает 1/6, то есть 0.166666.

Запустите код в текущем виде и изучите вывод в консоли. В этой функции есть две потенциально опасные операции: во-первых, если элемент, который мы пытаемся инвертировать, равен 0, код вызовет исключение ZeroDivisionError. Во-вторых, если переданный индекс выходит за пределы списка, код вызовет исключение IndexError. В обоих случаях выполнение скрипта прервётся, что не всегда желательно.

Это упражнение является частью курса

Объектно-ориентированное программирование на Python

Посмотреть курс

Инструкции к упражнению

Используйте конструкцию try - except - except (с двумя блоками except) внутри функции, чтобы перехватить и обработать два исключения следующим образом:

  • в блоке try выполните код в текущем виде,
  • если возникает ZeroDivisionError, выведите "Cannot divide by zero!",
  • если возникает IndexError, выведите "Index out of range!"

Вы всё сделали правильно, если код выполняется без ошибок и вывод в консоли выглядит так:

0.16666666666666666
Cannot divide by zero!
None
Index out of range!
None

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# MODIFY the function to catch exceptions
def invert_at_index(x, ind):
    return 1/x[ind]
 
a = [5,6,0,7]

# Works okay
print(invert_at_index(a, 1))

# Potential ZeroDivisionError
print(invert_at_index(a, 2))

# Potential IndexError
print(invert_at_index(a, 5))
Редактировать и запускать код