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이 편리해서 자주 썼는데, 위 상황을 주의해서 코드를 작성해야겠다.
'개발 > Python' 카테고리의 다른 글
파이썬 재귀함수로 문자열 거꾸로 출력하기 (0) | 2021.05.16 |
---|---|
정규식을 사용하여 여러 패키지 버전 한 번에 지우기 (0) | 2021.05.08 |
데이터프레임 안의 값만 출력하기 (0) | 2021.05.06 |
bash: pip: command not found 해결 (0) | 2021.05.06 |
UnpicklingError: invalid load key, 'v'. 문제 해결 (0) | 2021.04.27 |