Как обрабатывать тайм-аут urllib в Python 3?

Во-первых, моя проблема очень похожа на эту . Мне нужен тайм-аут urllib.urlopen () для генерации исключения, которое я могу обработать.

Разве это не относится к URLError?

try:
    response = urllib.request.urlopen(url, timeout=10).read().decode('utf-8')
except (HTTPError, URLError) as error:
    logging.error(
        'Data of %s not retrieved because %s\nURL: %s', name, error, url)
else:
    logging.info('Access successful.')

Сообщение об ошибке:

resp = urllib.request.urlopen (req, timeout = 10) .read (). Decode ('utf-8')
Файл "/usr/lib/python3.2/urllib/request.py", строка 138, в urlopen
вернуть opener.open (url, data, timeout)
Файл "/usr/lib/python3.2/urllib/request.py", строка 369, открыт
response = self._open (req, data)
Файл "/usr/lib/python3.2/urllib/request.py", строка 387, в _open
'_open', req)
Файл "/usr/lib/python3.2/urllib/request.py", строка 347, в _call_chain
результат = func (* args)
Файл "/usr/lib/python3.2/urllib/request.py", строка 1156, в http_open
вернуть self.do_open (http.client.HTTPConnection, req)
Файл "/usr/lib/python3.2/urllib/request.py", строка 1141, в do_open
r = h.getresponse ()
Файл "/usr/lib/python3.2/http/client.py", строка 1046, в getresponse
response.begin ()
Файл "/usr/lib/python3.2/http/client.py", строка 346, в начале
версия, статус, причина = self._read_status ()
Файл "/usr/lib/python3.2/http/client.py", строка 308, в _read_status
line = str (self.fp.readline (_MAXLINE + 1), "iso-8859-1")
Файл "/usr/lib/python3.2/socket.py", строка 276, в режиме чтения
вернуть self._sock.recv_into (b)
socket.timeout: timed out

В Python 3 произошли серьезные изменения, когда они реорганизовали модули urllib и urllib2 в urllib . Возможно ли, что это было вызвано изменением?

21
задан Community 23 May 2017 в 12:34
поделиться