Перехоплення винятків
Перш ніж писати власні користувацькі винятки, переконаймося, що ви добре розумієте основи оброблення винятків.
У цій вправі вам надано функцію invert_at_index(x, ind), яка приймає два аргументи: список x та індекс ind, і обертає (берe обернену величину) елемента списку за цим індексом. Наприклад, 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))