2023. 3. 13. 01:38ㆍ독서
안녕하세요!
<코딩 자율학습 나도코딩의 파이썬 입문> 멘토를 담당하게 된 이안입니다.
오늘은 10장 '예외 처리'를 이어서 학습할게요!
오늘 공부할 내용은 다음과 같습니다.
🧐 공부할 내용(p.338~345)
* 사용자 정의 예외 처리하기
* 오류와 상관없이 무조건 실행하기: finally
1. 사용자 정의 예외 처리하기
우리는 앞서서 ValueError, ZeroDivisionError같은 몇가지 에러를 봤습니다.
파이썬에는 기본으로 정의된 여러가지 에러들이 존재합니다.
하지만 이런 에러들로는 사용자가 필요한 에러를 처리하기엔 역부족입니다.
p.338에 있는 예제만 보더라도 그렇습니다.
class BigNumberError(Exception):
pass
if num1 >= 10 or num2 >= 10:
raise BigNumberError
ValueError를 발생시킬 수도 있지만, ValueError라는 의미자체가 상당히 모호합니다.
그렇기 때문에 우리는 사용자 정의 예외를 만드는 것이죠.
책에 따라 코드를 완성해보면 이런 코드가 됩니다.
class BigNumberError(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
try:
print("한 자리 숫자 나누기 전용 계산기입니다.")
num1 = int(input("첫 번째 숫자를 입력하세요 : "))
num2 = int(input("두 번째 숫자를 입력하세요 : "))
if num1 >= 10 or num2 >= 10:
raise BigNumberError(f"입력값: {num1}, {num2}")
print(f"{num1} / {num2} = {int(num1/num2)}")
except ValueError:
print("에러! 잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
except ZeroDivisionError as err:
print("에러! 0으로는 나눌 수 없습니다.")
except BigNumberError as err:
print("에러! 한 자리 숫자만 입력하세요.")
print(err)
BigNumberError는 Exception 클래스를 상속합니다.
그리고 생성자에 msg라는 메시지를 담는 인스턴스 변수를 가지고 있죠.
보통은 p.341처럼 오류 코드를 많이 활용합니다.
오류 코드를 활용하면 상세히 살펴보지 않아도 오류 내용을 한 눈에 확인할 수 있기 때문이죠.
2. 오류와 상관없이 무조건 실행하기: finally
finally는 오류와 상관없이 무조건 실행하는 절입니다.
p.344에서 마지막에 인삿말을 출력하는 문장을 두었습니다.
이런 것처럼 마지막에 오류와 상관없이 실행하고 싶은 문장이나 작업을 둘 수 있습니다.
다만 메서드에 finally를 사용했을 때 return은 지양해야합니다.
def addItem(item1, item2):
try:
return item1 + item2
except TypeError:
print("에러! 잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
finally:
return 10
print(addItem(1, 2))
이런 코드가 있다고 생각해보죠.
우리는 item1, item2가 문자열이면 문자열이 합쳐진 문자열을 리턴하고
모두 숫자라면 합을 반환하고, 타입이 다르면 에러를 발생시킬 것을 기대하고 있습니다.
하지만 이 코드는 기대처럼 동작하지 않습니다.
왜냐하면 finally 절에서 항상 10을 리턴하기 때문이죠.
그렇기 때문에 어떤 값을 넣어도 항상 10이 돌아오는 문제가 생기게 됩니다.
그래서 finally 절에서 return의 사용은 지양해야합니다.
이번 시간에는 오류 처리와 발생에 대해 공부했습니다.
공부하시다 궁금하신 점이 있다면 댓글 남겨주세요~
✅ 정리
* 사용자 예외 처리하기
* 오류와 상관없이 무조건 실행하기: finally
* finally 문에 return 사용 지양하기
'독서' 카테고리의 다른 글
(나도코딩의 파이썬 입문) 11장. 모듈과 패키지(p.363~368) (0) | 2023.03.15 |
---|---|
(나도코딩의 파이썬 입문) 11장. 모듈과 패키지(p.353~362) (0) | 2023.03.14 |
(나도코딩의 파이썬 입문) 10장. 예외 처리(p.326~337) (0) | 2023.03.10 |
(나도코딩의 파이썬 입문) 9장. 클래스(p.295~320) (0) | 2023.03.10 |
(나도코딩의 파이썬 입문) 9장. 클래스(p.277~298) (0) | 2023.03.07 |