2016-09-16 7 views
2

Я ищу способ обработки исключений таймаута для моего бота Reddit, который использует PRAW (Python). Он истекает, по крайней мере, один раз в день, и он имеет переменную кодировку, поэтому мне нужно обновить переменную, а затем вручную запустить бот. Я ищу способ автоматически обрабатывать эти исключения. Я посмотрел в try: и кроме :, но я боюсь, что добавление точки останова после time.sleep (10) полностью остановит цикл. Я хочу, чтобы он продолжал работать в цикле, независимо от того, истекает время или нет. Ниже приведен пример кода.Обработка исключения таймаута в 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

Я должен добавить, что одна из функций бота в том, что, когда он не обнаружил комментарий на некоторое время находится спит в течение 10 секунд, а затем проверяет снова, так что это не мешает распространение спама Reddit , Если бы я должен был сделать, кроме: continue, будет ли цикл работать, как если бы он пытался: run_bot()? Есть ли способ сохранить этот сон там? –

+0

Я пытаюсь понять: сам 'run_bot' спит в течение 10 секунд, если ничего нового не найдено. И вы снова спите после окончания 'run_bot'? Итак, когда точно выбрано исключение? – Alu

+0

Я считаю, что исключение бросается, когда он пытается подключиться к Reddit, но он терпит неудачу. Сон после запуска run_bot (10) - единственный сон –

0

Перемещение сна, наконец, решит вашу проблему, я думаю. наконец, блок будет работать независимо от того, произошло ли исключение или нет.

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)