Перехват исключений
Прежде чем приступить к написанию собственных исключений, давайте убедимся, что вы освоили основы обработки исключений.
В этом упражнении вам дана функция 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))