Обработка тайм-аута urllib2? - Python

Я использую параметр тайм-аута в urlopen urllib2.

urllib2.urlopen('http://www.example.org', timeout=1)

Как я говорю Python, что, если тайм-аут истекает, пользовательская ошибка должна быть повышена?


Какие-либо идеи?

62
задан RadiantHex 26 April 2010 в 10:03
поделиться

1 ответ

Есть очень мало случаев, когда вы хотите использовать , кроме: . Это фиксирует любое исключение, которое может быть трудно отладить, и захватывает исключения, включая SystemExit и KeyboardInterupt , которые могут сделать вашу программу раздражающей.

В самом простом случае вы бы поймали urllib2.URLError :

try:
    urllib2.urlopen("http://example.com", timeout = 1)
except urllib2.URLError, e:
    raise MyException("There was an error: %r" % e)

Следующее должно фиксировать конкретную ошибку, возникающую при истечении времени ожидания соединения:

import urllib2
import socket

class MyException(Exception):
    pass

try:
    urllib2.urlopen("http://example.com", timeout = 1)
except urllib2.URLError, e:
    # For Python 2.6
    if isinstance(e.reason, socket.timeout):
        raise MyException("There was an error: %r" % e)
    else:
        # reraise the original error
        raise
except socket.timeout, e:
    # For Python 2.7
    raise MyException("There was an error: %r" % e)
99
ответ дан 24 November 2019 в 16:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: