티스토리 뷰

728x90
반응형

Python 에서는 기본적으로 아래 코드와 같이 while 문에서 탈출하기 위해서는 break 를 사용해서 탈출하는데요.

end_of_page = False

while True:
    # ...생략...
    if end_of_page == True:
        break
    else:
        continue

하지만 특정 조건이 따로 존재하지 않고, 무한하게 돌아가야 하는 상황이 있다고 가정하면 어떨까요?

예를 들어 제가 요즘 공부하고 있는 웹 사이트를 무한하게 크롤링해서 데이터베이스에 저장하도록 하는 크롤러 같은 파이썬 프로그램에서의 경우처럼 말이죠.

 

이런 경우에는 무한히 돌아가도록 해야합니다. 다만, 임시로 특정 부분에서 잘 돌아가는 지 또는 어떤 오류가 나는 지 확인하기 위해서라면 어떨까요? 물론 파이썬 디버거를 활용해서 이런 문제를 디버깅해서 해결할 수도 있습니다.

 

저도 사실 Visual Studio Code 에서 파이썬 개발을 하고 있는데, 여기엔 파이썬 디버거가 설치되어 있어서, 언제든 쉽게 디버깅할 수 있습니다. 다만, 이 디비거를 실행하는 데 있어서 살짝 번거로운 감도 있고 성능이 많이 요구되는 것도 있어서, 저는 바로 실행하고 특정 실행 결과만 확인하기 위할 때는 아래와 같은 코드를 사용하곤 합니다.

# import sys

soup = None
while True:
	# ... 생략 ...
    print("===============")
    print(soup)
    import sys
    sys.exit()

위 코드에서는 soup 라는 변수가 while 문 루프 안에서 값이 어떻게 변하는 지 확인하기 위해서 soup 변수의 값을 출력하게 하고 프로그램이 종료되도록 sys 모듈을 사용해서 exit 하도록 했습니다.

 

위와 같이 잠깐 잠깐 부분적으로 출력 후 종료하도록 해서 코드를 디버깅할 수 있습니다.

 

근데 가끔은 그냥 Ctrl+C 버튼을 눌러서 while 문을 탈출시키고 싶을 때도 있습니다. 또 탈출 시점에서 변수가 가지고 있는 값은 어떤 값일지도 확인해볼 수 있습니다. 이 때 사용할 수 있는 코드는 아래와 같습니다.

soup = None
try:
    while True:
        # ...생략...
        soup = something
except KeyboardInterrupt:
    print("Press Ctrl-C to terminate while statement")
    print(soup)
    pass

이 코드에서는 while 문을 try ... except 구문 안에 넣고 사용해서 만약 Ctrl+C 와 같은 키보드 인터럽트가 발생했을 때 while 문을 탈출할 수 있게 한 코드입니다.

 

어떤 콘솔 프로그램에서는 Ctrl+C 를 눌렀을 때 현재 실행되고 있는 프로그램을 자동으로 종료하도록 해주는 반면에 어떤 프로그램은 그런 기능이 없거나 기본 설정으로 되어 있지 않을 수도 있습니다. 이 때는 그냥 위와 같은 코드를 수정하여 자체적으로 키보드 인터럽트가 발생했을 때 while 루프를 종료하도록 할 수 있습니다.

 

- 끝 -

728x90
반응형
댓글