본문 바로가기
프로그래밍/Python

유용하게 쓰이는 try ~ except 구문

by 페이지다운 2020. 7. 15.
반응형

이번에 내 인터파크 매크로 코드를 보면 try ~ except 구문으로 떡칠되어 있는 모습을 볼 수 있다.

 

아마도 아래와 같은 형태일 것이다.

1
2
3
4
5
6
7
while True:
    try:
        pass # 실행할 구문
    except:
        continue
    else:
        break
cs

셀레니움은 웹페이지가 다 로딩되기 전에 요소를 찾으려고 하면 없다고 예외를 내뿜으면서 꺼진다. 

 

그러나 로딩 속도는 사용자 컴퓨터 성능이나 인터넷 속도 영향을 많이 받고, 때에 따라 다르기 때문에 항상 언제 정확히 몇초 후에 로딩이 될 것이라고 예측할 수가 없다. 

 

보통은 Explicit Waits을 쓰면 되지만, 그래도 불확실성이 완전히 해소된다는 보장도 없고, 내가 써 보니 잘 안되서 위와 같은 형태를 취하게 되었다.

 

해석하자면 일단 실행할 구문을 무한 루프 안에 가둬 놓고 예외가 나지 않을 때까지(셀레니움에서는 로딩이 끝나 정상적으로 요소를 찾을 수 있을 때까지) 실행한다. 그리고 예외 없이 정상적으로 실행되면 루프를 나간다.

 

그리고 몇 번 실행하고 더 이상 안되면 꺼버리고 싶을 때, 아래와 같이 for 구문을 사용하면 된다.

1
2
3
4
5
for i in range(0, time):
    try:
        pass
    except:
        continue
cs

무식한 방법처럼 보이지만, 제일 간단하고 정확하다. 오히려 될 때까지 시도한다는 점 때문에 일정 시간이 지나면 포기하는 Explicit Waits와는 다르게 어떻게든 예매창에 들어가기만 하면 좌석을 알아서 선택하고 나오게 된다.

 

사실 이 방법을 쓰기 전에 고민했는데, 이걸 쓰면 코드가 너무 지저분해지기 때문이다. 당장 구문만 빼고 들어가는 줄 수만 봐도 6줄이나 된다. 이게 몇개씩이나 있어서 코드 가독성을 해친다.

 

그냥 생각하기 싫을 때나 어떤 일이 있어도 절대로 프로그램이 종료되지 말아야 하는 경우에 쓸 수는 있어도, 가급적이면 다른 방법을 사용하는 것을 권한다.

반응형

댓글