Поэтому у меня есть ситуация, когда я должен использовать интернет-соединение в течение 12 часов подряд и делать звонки на api. Но Свет продолжает уходить каждые 10 минут. Можно написать попытку, кроме функции, которая вызовет задержку в 10 минут в случае возникновения ошибки тайм-аута. Надеемся, что электричество вернется через 10 минут. | Это то, что я сейчас использую:
try:
a=translator.translate(str(x1),dest='hi')
b=translator.translate(str(x2),dest='hi')
except:
sleep(60*10)
Вы можете использовать модуль 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 вызывает исключение
Используйте 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