[BW 20] None을 반환하기보다는 예외를 발생시켜라

False와 동등한 반환 값을 잘못 해석하는 경우는 None이 특별한 의미를 가지는 파이썬 코드에서 흔히 저지르는 실수다.

아래 코드처럼 result는 0이 되어야 하는데, 잘못된 입력이 출력되는 상황이 발생한다.

x, y = 0, 5

def careful_divide(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        return None
        

result = careful_divide(x, y)
if not result:
    print('잘못된 입력')

이를 해결하기 위해 두 가지 방법을 생각해볼 수 있다.

  1. 반환 값을 튜플로 분리한다.
    • 첫 번째 요소에 성공 여부를 표시한다.
    • 두 번째 요소에 실제 값을 표시한다.
  2. Exception을 호출한 쪽으로 발생시켜서 호출자가 이를 처리하게 한다.