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.

Другие вопросы по тегам