ПочатиПочніть безкоштовно

Перехоплення винятків

Перш ніж писати власні користувацькі винятки, переконаймося, що ви добре розумієте основи оброблення винятків.

У цій вправі вам надано функцію 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))
Редагувати та запускати код