Спи в случае ошибки, питон

1

Поэтому у меня есть ситуация, когда я должен использовать интернет-соединение в течение 12 часов подряд и делать звонки на api. Но Свет продолжает уходить каждые 10 минут. Можно написать попытку, кроме функции, которая вызовет задержку в 10 минут в случае возникновения ошибки тайм-аута. Надеемся, что электричество вернется через 10 минут. | Это то, что я сейчас использую:

try:
        a=translator.translate(str(x1),dest='hi')   
        b=translator.translate(str(x2),dest='hi')
    except:
        sleep(60*10)
Теги:
exception-handling
error-handling

2 ответа

1

Вы можете использовать модуль retry для такого рода повторных retry при исключении. Это делает код намного более чистым. pip install retry следует установить модуль

from retry import retry

@retry(Exception, delay=10*60, tries=-1)
def my_code_that_needs_to_be_retried_for_ever():
    a=translator.translate(str(x1),dest='hi')   
    b=translator.translate(str(x2),dest='hi')

# Call the function
my_code_that_needs_to_be_retried_for_ever()

С помощью приведенного выше кода, когда вызывается my_code_that_needs_to_be_retried_for_ever он будет повторен каждые 60 * 10 секунд (10 минут) навсегда (поскольку попытки установлены на -1) каждый раз, когда код внутри блока fuction вызывает исключение

1

Используйте try и except чтобы поймать исключение, а затем time.sleep чтобы time.sleep скрипт Python на требуемое время. Вы можете поместить все внутри бесконечной во while цикла и break из него когда - то все закончилось.

while True:
    try:
        # put everything here which might produce exception
        pass 
        # if this point is reached everything worked fine, so exit loop
        break
    except:
        time.sleep(10*60)

Вы можете запустить следующий пример, чтобы увидеть общую идею:

import random
import time

print("Before loop")

while True:
    try:
        print("Try to execute commands")
        # your commands here
        if random.random() > 0.3:
            print("Randomly simulate timeout")
            raise Exception("Timeout")
        print("Everything done")
        break
    except:
        print("Timeout: sleep for 2 seconds and try again")
        time.sleep(2)

print("After loop")

Вместо реальных команд мы произвольно решаем создать исключение для имитации таймаута. Результат может выглядеть примерно так:

Before loop
Try to execute commands
Randomly simulate timeout
Timeout: sleep for 2 seconds and try again
Try to execute commands
Randomly simulate timeout
Timeout: sleep for 2 seconds and try again
Try to execute commands
Randomly simulate timeout
Timeout: sleep for 2 seconds and try again
Try to execute commands
Everything done
After loop

Ещё вопросы

Сообщество Overcoder
Наверх
Меню