본문 바로가기

개발/Python

try except에서 None 사용 조심!

try, except 구문을 쓸 때,
조건에 따라 except 상황의 경우 None을 리턴해주는 식으로 코드를 짤 때가 있는데,

if not result: 와 같이
조건식에서 not을 활용하는 경우 빈 문자열, 빈 리스트, 0, None이 다 False기 때문에 예상치 못한 결과가 나올 수 있어 주의해야 한다.

 

# 1. 문제 안 됨

def none_test(num1, num2):
  try:
    return num1 / num2
  except ZeroDivisionError:
    return None       # None 반환

result = none_test(0,2)
print(result) # 정상결과

if result is None: # 답은 0.0이고 None이 않으므로
  print('result is None') # 이 문장은 출력되지 않음

위 코드는 0을 2로 나눈다. 이 경우는 결과가 0.0이며,

if result is None: 이라는 상황에서도 출력되지 않는다.

 

하지만, if not을 쓰면 얘기가 달라진다.

# 문제발생상황

result = none_test(0, 2) # 0을 2로 나누는 경우 결과는 0.0
print(result)

if not result: # 이 조건은 None일 경우를 묻는 것인데, if not의 경우 0도 False로 인식되므로
  print('not result') # 이 문장이 출력된다.

 

if not이 편리해서 자주 썼는데, 위 상황을 주의해서 코드를 작성해야겠다.