Python 루프의 else: 당신이 사용하지 않는 기능

발행: (2026년 1월 5일 오전 10:02 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

규칙

else 블록은 break 를 만나지 않고 루프가 정상적으로 종료될 때만 실행됩니다.

while condition:
    if found_target:
        break
    # keep searching
else:
    # This runs only if we never broke out
    print("Search completed without finding target")

왜 중요한가

검색 루프를 생각해 보세요. else 를 사용하지 않으면 플래그 변수를 따로 관리해야 합니다:

found = False
index = 0
while index  # (incomplete condition)

Note: 이것은 단순화된 예시입니다. 실제 프로덕션 재시도 로직은 일반적으로 지수 백오프와 지터를 포함하여 여러 클라이언트가 동시에 재시도하면서 서버에 과부하가 걸리는 것을 방지합니다.

왜 잘 사용되지 않을까

이름이 혼란스럽기 때문입니다. 루프 뒤의 else 가 “break가 없을 때 실행”이라는 의미처럼 들리지 않고, 조건문에 연결된 것처럼 보입니다.

일부 파이썬 개발자는 else 대신 nobreak 혹은 finally 라는 이름이 더 적절했을 것이라고 주장하기도 합니다(하지만 finally는 파이썬 예외 처리에서 이미 다른 의미를 가지고 있습니다).

문법 자체는 바뀌지 않을 것이므로, 가장 좋은 방법은 else는 nobreak와 동일하게 생각하는 정신 모델을 내면화하는 것입니다.

언제 사용해야 할까

  • 검색 루프 – 플래그 없이 “찾지 못함”을 처리
  • 재시도 패턴 – “모든 시도가 소진됨”을 처리
  • 검증 루프 – “유효한 옵션을 찾지 못함”을 처리

Important: break 로 조기 종료하는 루프에만 유용합니다. 루프에 break 가 없으면 else 가 항상 실행되며, 이는 거의 원하지 않는 동작입니다.

보너스: 흔한 무한 루프 버그

버그 1: 변수 업데이트를 잊음

count = 0
while count  0:          # <-- missing comparison operator
    print(count)
    count += 1  # Should be: count -= 1

버그 2: (원본에 없음)

내용이 제공되지 않음.

버그 3: not‑equals 로 인한 오프‑바이‑원

x = 3
while x != 10:
    x += 2  # x goes 3, 5, 7, 9, 11... never equals 10

수정:

x = 1000
print("WARNING: Loop hit safety limit!")

내 다가오는 책 “Zero to AI Engineer: Python Foundations.”

Back to Blog

관련 글

더 보기 »

100일 중 4일

Random 모듈 오늘 나는 random 모듈과 그 다양한 사용 사례 및 함수에 대해 배웠다. Python 문서를 훑어보고 실험해보았다.