더북(TheBook)

BETTER WAY 14
None을 반환하기보다는 예외를 일으키자

 

 

파이썬 프로그래머들은 유틸리티 함수를 작성할 때 반환 값 None에 특별한 의미를 부여하는 경향이 있다. 어떤 경우에는 일리 있어 보인다. 예를 들어 어떤 숫자를 다른 숫자로 나누는 헬퍼 함수를 생각해보자. 0으로 나누는 경우에는 결과가 정의되어 있지 않기 때문에 None을 반환하는 게 자연스럽다.

def divide(a, b):

try:

return a / b

except ZeroDivisionError:

return None

 

이 함수를 사용하는 코드는 반환 값을 다음과 같이 해석한다.

result = divide(x, y)

if result is None:

print(‘Invalid inputs’)

 

그런데 분자가 0이 되면 어떤 일이 일어날까? 반환 값도 0이 되어버린다(분모가 0이 아닐 경우). 그러면 if 문과 같은 조건에서 결과를 평가할 때 문제가 될 수 있다. 오류인지 알아내려고 None 대신 실수로 False에 해당하는 값을 검사할 수도 있다(Better way 4 “복잡한 표현식 대신 헬퍼 함수를 작성하자”에서 비슷한 경우에 대해 설명했다).

x, y = 0, 5

result = divide(x, y)

if not result:

print(‘Invalid inputs’)   # 잘못됨!

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.