예외 잡기
직접 사용자 정의 예외를 만들기 전에, 먼저 예외를 처리하는 기본기를 확실히 다져 보겠습니다.
이 연습 문제에서는 두 개의 인수, 리스트 x와 인덱스 ind를 받아서 해당 인덱스의 리스트 원소를 역수로 바꾸는 함수 invert_at_index(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))