2014-03-30 4 views
0

로드가 실패한 경우 웹 페이지를 새로 고치는 try-except 루프를 코딩하려고합니다. 여기에 지금까지 한 일이다 :Python - Try-except loop - 예외로 시간 지연을 참조하십시오.

driver.get("url") 

while True: 
    try: 
     <operation> 
    except: 
     driver.refresh() 

나는 5 초 경과 및 작업이 (페이지가로드되지 않은 아마도 때문에) 실행되지 않는 경우는 새로 고침을 시도하도록이 루프를 설정하려면 페이지. 시간 지연을 잡는 except에 통합 할 수있는 예외가 있습니까?

+0

여기를 참조하십시오 : http://stackoverflow.com/questions/8616630/time-out-decorator-on-a-multprocessing-function – ebarr

답변

0

이 게시물을 읽는 것이 좋습니다 Timeout function if it takes too long to finish.

요점은 신호를 사용하여 코드를 중단하고 오류가 발생하여이를 잡아낼 수 있다는 것입니다. 당신이 예에서

: 당신은 다음 코드와이를 테스트 할 수 있습니다

def _handle_timeout(signum,frame): 
    raise TimeoutError("Execution timed out") 

driver.get("url") 
signal.signal(signal.SIGALRM, _handle_timeout) 

while True: 
    try: 
     signal.alarm(<timeout value>) 
     <operation> 
     signal.alarm(0) 
    except: 
     driver.refresh() 

:

import time 
import signal 

def _handle_timeout(signum,frame): 
    raise TimeoutError("Execution timed out") 

def test(timeout,execution_time): 
    signal.signal(signal.SIGALRM, _handle_timeout) 
    try: 
     signal.alarm(timeout) 
     time.sleep(execution_time) 
     signal.alarm(0) 
    except: 
     raise 
    else: 
    print "Executed successfully" 

이 때 오류 execution_time > timeout을 올릴 것이다.

여기에 언급 된대로 Python signal don't work even on Cygwin? 위의 코드는 Windows 시스템에서 작동하지 않습니다.

+0

감사합니다. 그러나, 신호를 얻을 수 없습니다 .SIGALRM은 Python 3.3.4에서 작동합니다. 'AttributeError : 'module'객체에 'SIGALRM'속성이 없습니다. – user3294195

+0

다른 사람에게 중요한 점이기 때문에 대답에 한 줄을 추가했습니다. – ebarr

+0

또한이 블로그 게시물은 주제에 대한 읽기가 필요합니다. http://eli.thegreenplace.net/2011/08/22/how-not-to-set-a-timeout-on-a-computation-in-python / – ebarr