2016-09-16 2 views
2

PRAW (Python)를 사용하는 Reddit 봇의 시간 초과 예외를 처리 할 방법을 찾고 있습니다. 매일 적어도 한 번은 시간이 초과되고 변수가 코딩되어 있으므로 변수를 업데이트 한 다음 수동으로 다시 실행해야합니다. 이러한 예외를 자동으로 처리하는 방법을 찾고 있습니다. 나는 try를 살펴 봤다 : except :하지만, time.sleep (10) 이후에 break point를 추가하는 것이 loop를 완전히 멈추게 할까 봐 걱정된다. 시간 초과 여부에 상관없이 루프를 계속 실행하고 싶습니다. 아래 코드 샘플이 있습니다.Python에서 시간 초과 예외 처리

def run_bot(): 
    # Arbitrary Bot Code Here 

    # This is at the bottom of the code, and it runs the above arbitrary code every 10 seconds 
while True: 
    try: 
     run_bot() 
     time.sleep(10) 
    except: 
     # Don't know what goes here 

답변

1

시간 초과가 발생할 때 수행 할 작업에 따라 다릅니다.

pass에 아무 것도하지 않고 루프를 계속할 수 있습니다. 귀하의 경우에는

try: 
    run_bot() 
except: 
    pass 

try: 
    run_bot() 
except: 
    continue 

로 명시 적으로 작성하는 더 좋을 것이다 그러나 당신은 또한

try: 
    run_bot() 
except e: 
    print 'Loading failed due to Timeout' 
    print e 

항상 확인 루프를 만들기 위해 절을 제외하고 일부 로깅을 추가 할 수 있습니다 잠을 자면 다음과 같이 할 수 있습니다 :

nr_of_comments = 0 

def run_bot(): 
    # do stuff 
    nr_of_comments =+ 1 

while True: 
    sleep(10) 
    try: 
     run_bot() 
    except e: 
     continue 
+0

. 다음과 같은 경우를 제외하고는 계속 진행하십시오 : 루프가 여전히 실행중인 것처럼 실행됩니다 : run_bot()? 그곳에서 잠을 자도록 할 방법이 있습니까? –

+0

나는 새로운 것을 발견하지 못하면'run_bot' 자체가 10 초 동안 자고 있음을 이해하려고한다. 'run_bot '이 끝난 후에 다시 자나요? 정확히 예외가 throw되는 시점은 언제입니까? – Alu

+0

Reddit에 연결하려고 시도했지만 예외가 발생하면 예외가 throw됩니다. run_bot (10) 이후의 sleep은 유일한 sleep입니다. –

0

마침내 수면을 이동하면 문제가 해결 될 것입니다. finally 블록은 예외가 발생했는지 여부에 관계없이 실행됩니다.

def run_bot(): 
    # Arbitrary Bot Code Here 

    # This is at the bottom of the code, and it runs the above arbitrary code every 10 seconds 
while True: 
    try: 
     run_bot() 
    except: 
     from traceback import format_exc 
     print "Exception happened:\n%s" % (format_exc()) 
    finally: 
     time.sleep(10) 
I는 로봇의 기능 중 하나는 감지되지 않았을 때 잠시 코멘트가 스팸 레딧을 유지하지 않도록 10 초 동안 대기 한 후 다시 검사 있다는 것을 추가한다