파이썬에서는 if 이후뿐만 아니라 for 및 while 루프 이후에도 else를 사용할 수 있습니다. else 블록은 루프가 "정상적인" 방식으로 종료되었을 때만 실행됩니다 — 즉, break로 종료되지 않았을 때입니다. 이를 통해 요소 검색과 같은 작업을 우아하게 구현할 수 있습니다.
예시:
for x in range(5): if x == 3: print('break!') break else: print('루프가 break 없이 종료되었습니다') # 실행되지 않음
for x in range(5): if x == 10: break else: print('루프가 break 없이 종료되었습니다') # 실행됨
이 기능은 종종 "성공하지 않은 검색"을 위해 사용됩니다: break가 발생하지 않으면, 요소가 발견되지 않았다는 의미입니다.
루프가 종료되면 항상 else 블록이 실행됩니까? 루프가 비어 있다면 어떻게 됩니까?
답변: 네, break가 없으면, else는 루프 본문에 한 번도 들어가지 않아도 항상 실행됩니다:
for x in []: print('아무것도') else: print('else!') # 이것이 출력될 것입니다
이야기
프로젝트: 문서 파서.
문제: 리스트에서 키를 검색하고 루프 종료 후 else 밖에서 "not found" 플래그를 설정했습니다. 결과적으로 요소 발견 기능이 비정상적으로 작동하고, break가 발생하지 않으면 잘못된 결과가 나왔습니다.
이야기
프로젝트: 고유한 토큰 생성.
문제: 토큰 생성 로직이 break에 의한 올바른 종료에 의존했으며, else는 "예외적인 경우"로 잘못 간주되었습니다. 사실상 99%의 실행에서 발생하여 사용자 인증 로직이 깨졌습니다.
이야기
프로젝트: 네트워크 API를 위한 테스트 스크립트.
문제: while 이후 else의 잘못된 이해로 인해 타임아웃 처리를 위해 이를 사용했지만, 루프가 break 없이 종료되었고 타임아웃이 포착되지 않아 테스트에서 "조용한" 오류가 발생했습니다.