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

매일 공부(ML)·2022년 6월 11일
0

이어드림

목록 보기
72/146

None의 의미

  • 유틸리티 함수를 작성할 때 반환 값을 None으로 하면 특별한 의미를 부여하는 경향을 보인다.

  • 그로 인해서 아래와 같이 반환 오류가 생긴다.

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

        return None

x,y = 1,0
result = careful_divide(x,y)
if result is None:
    print('잘못된 입력')

#실행은 되지만 실행이 되면 안됨
#원래의 답은 0이 나와야한다
x,y = 0,5
result = careful_divide(x,y)
if not  result:
    print('잘못된 입력') # 잘못된 입력

해결방법

반환값을 2-튜플로 분리

  • 첫 번째 부분은 연산의 성공/실패 여부

  • 두 번째 부분은 성공한 경우의 실제 결과값을 저장

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

success, result = careful_divide(x,y)
if not success:
	print('잘못된 입력')
  • 나눗셈 결과를 검사하지 못하고 튜플 상태로 내버려둔다
_, result = careful_divide(x,y)
if not success:
    print('잘못된 입력')
None을 반환하는 경우처럼 실수를 할 수 있는 코드

두번째 방법:Nonne을 반환하지 않기

  • Exception을 호출시켜서 None을 반환하지 않기

  • ZeroDivisionError이 발생한 경우 ValueError을 활용하여 입력값이 잘못되었음을 알린다.

def careful_divide(a,b):
    try:
        return a/b
    except ZeroDivisionError as e:
        raise ValueError('잘못된 입력')
profile
성장을 도울 아카이빙 블로그

0개의 댓글