[파이썬] break, continue, pass

2022-03-23
파이썬 반복문에서 break, continue, pass의 차이

알고보면 간단하지만, 초보 입장에선 늘 헷갈리는 명령어가 이거다. breakpass, continue 세 가지. 셋 다 반복문에서 쓰이는데 경우에 따라 반복문을 종료하거나, 건너뛰거나, 그대로 이어가도록 해주는 역할을 한다. break는 상대적으로 명확하지만 pass와 continue는 한동안 안 쓰다보면 금세 헷갈리곤 하더라. 이참에 정리해두는 게 좋을 듯.

1. break

break 선언문은 그 뜻에서 보듯 역할이 명확하다. 그 즉시 반복문을 끝내고 빠져나오는 역할.

for num in range(10):
  if num == 5:
    break
  print(f"이번 숫자는 {num}입니다.")

이 반복문을 돌렸을 때 결과는 아래와 같다.

"이번 숫자는 0입니다."
"이번 숫자는 1입니다."
"이번 숫자는 2입니다."
"이번 숫자는 3입니다."
"이번 숫자는 4입니다."

반복문이 0부터 10까지 차례로 값을 보내다 5가 나오면 자동으로 반복문을 끝내고 빠져나온다. 아래는 비밀번호 입력창을 for문과 break로 구현한 예시.

for pass in range(1, 4): # 입력 기회는 3번 제공.
	passwd = input("\n비밀번호를 입력하세요: ")
  if passwd == 'Python':
    print("비밀번호가 일치합니다.\n다음 단계로 진행하세요.")
    beak
  else:
    print(f"비밀번호가 일치하지 않습니다. {pass}회 시도했습니다.")
비밀번호를 입력하세요: Java
비밀번호가 일치하지 않습니다. 1 시도했습니다.

비밀번호를 입력하세요: Python
비밀번호가 일치합니다.
다음 단계로 진행하세요.

2. continue

continue와 pass 모두 반복문을 계속 이어가는 의미를 담은 것 같지만, 둘의 쓰임새는 다르다. 반복문 중간에 continue 선언문을 만나면 그 자리에서 더 진행하지 않고 반복문 처음으로 돌아간다. 설명이 어렵지만 예문을 보면 쉽게 이해할 수 있다.

for num in range(10):
  if num == 5:
    continue
  print(f"이번 숫자는 {num}입니다.")
이번 숫자는 0입니다.
이번 숫자는 1입니다.
이번 숫자는 2입니다.
이번 숫자는 3입니다.
이번 숫자는 4입니다.
이번 숫자는 6입니다.
이번 숫자는 7입니다.
이번 숫자는 8입니다.
이번 숫자는 9입니다.

0부터 9까지 돌다가 num 값이 5가 되면 아래로 내려가지 않고 반복문으로 돌아가 다음 인자를 진행한다. 그래서 숫자 5가 인자로 주어졌을 땐 print 출력 결과가 빠졌다.

3. pass

pass는 continue처럼 그 자리에서 멈추고 다음 반복문을 진행하는 게 아니라 그대로 아래로 통과하는 선언문이다. 위와 같은 코드에서 continue를 pass로 바꾸면 결과는 아래와 같다.

for num in range(10):
  if num == 5:
    pass
  print(f"이번 숫자는 {num}입니다.")
이번 숫자는 0입니다.
이번 숫자는 1입니다.
이번 숫자는 2입니다.
이번 숫자는 3입니다.
이번 숫자는 4입니다.
이번 숫자는 5입니다.
이번 숫자는 6입니다.
이번 숫자는 7입니다.
이번 숫자는 8입니다.
이번 숫자는 9입니다.

continue와 달리 pass는 반복문 처음으로 돌아가지 않고 해당 반복문을 그대로 실행한다. 즉, 아무 것도 하지 않고 해당 반복문을 계속 이어간다. 그래서 5 인자가 주어졌을 때도 그 뒤에 이어지는 print 명령을 실행한다.

한 반복문에서 contunue와 pass를 함께 써보면 그 차이를 보다 명확히 알 수 있다.

for num in range(5):
    pass
    print(f"이번 숫자는 {num}입니다.")
    print("이것은 'pass' 뒤에 인쇄되는 문구입니다.")
    continue
    print("이것은 'continue' 뒤에 인쇄되는 문구입니다.")
이번 숫자는 0입니다.
이것은 'pass' 뒤에 인쇄되는 문구입니다.
이번 숫자는 1입니다.
이것은 'pass' 뒤에 인쇄되는 문구입니다.
이번 숫자는 2입니다.
이것은 'pass' 뒤에 인쇄되는 문구입니다.
이번 숫자는 3입니다.
이것은 'pass' 뒤에 인쇄되는 문구입니다.
이번 숫자는 4입니다.
이것은 'pass' 뒤에 인쇄되는 문구입니다.

반복문이 continue를 만나면 진행을 멈추고 처음으로 돌아가 다음 반복문을 실행한다. 그러니 반복문이 끝날 때까지 continue 뒤에 붙은 print 명령은 실행되지 않는다.

그렇다면…

for num in range(10):
  print(f"이번 숫자는 {num}입니다.")

라고 하면 되지 왜 굳이 중간에 pass가 포함된 조건문을 붙였을까.

pass는 대개 나중에 쓸 함수 자리를 미리 만들어둘 때 쓴다. 코드를 제대로 실행하기 위해 def를 사용해 함수를 정의해둬야 하는데, 지금 당장은 다른 코드 작업을 먼저 해야 할 때 함수 자리를 ‘찜’해두는 것이다.

def get_title():
  pass

일단 함수 자리를 지정해두고 코드는 나중에 짜자. 다른 코드를 먼저 짜면서 실행해봐도 pass가 들어 있는 함수는 에러를 내지 않는다. pass 없이 def get_title():만 입력해두면 중간에 코드를 디버깅할 때 저 위치에서 오류를 뱉어내므로 진행이 안 된다.

반복문에서 예외처리를 할 때도 pass를 쓴다. 요건 다음에 예제를… :)