Python - цикл Try-Кроме - Ссылка на задержку как исключение
Я пытаюсь закодировать цикл с исключением, который обновляет веб-страницу, если она не загружается. Вот что я сделал до сих пор:
driver.get("url")
while True:
try:
<operation>
except:
driver.refresh()
Я хочу настроить этот цикл так, чтобы по прошествии 5 секунд операция не выполнялась (предположительно из-за того, что страница не загружалась), она пытается обновить страницу. Есть ли исключение, которое мы можем включить в except
что ловит задержку?
1 ответ
Я бы порекомендовал прочитать эту функцию Timeout, если она занимает слишком много времени, чтобы закончить.
Суть в том, что вы можете использовать сигналы, чтобы прервать код и вызвать ошибку, которую вы затем поймаете.
В вашем примере:
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 сигнал не работает даже на Cygwin? приведенный выше код не будет работать на машинах Windows.