У меня небольшой сканер, и я извлекаю содержимое веб-страницы из простой страницы.
def url2dict(url):
'''
DOCSTRING: converts two-column data into a dictionary with first column as a key.
INPUT: URL address as a string
OUTPUT: dictionary with one key and one value
'''
with urlopen(url) as page:
page_raw = page.read()
...
Теперь эта функция вызывает сервер по ссылке. Проблема в том, что сервер сгенерировал 504 Ошибка
File "C:\Python38\lib\urllib\request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "C:\Python38\lib\urllib\request.py", line 531, in open
response = meth(req, response)
File "C:\Python38\lib\urllib\request.py", line 640, in http_response
response = self.parent.error(
File "C:\Python38\lib\urllib\request.py", line 569, in error
return self._call_chain(*args)
File "C:\Python38\lib\urllib\request.py", line 502, in _call_chain
result = func(*args)
File "C:\Python38\lib\urllib\request.py", line 649, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 504: Gateway Time-out
Моя проблема в том, что я не могу найти значение по умолчанию для тайм-аута urlopen.
Здесь https://bugs.python.org/issue18417 it Говорят, что по умолчанию тайм-аут (timeout = None) отсутствует (по крайней мере для Python 3.4 версии):
ОК, я рассмотрел проблему достаточно, чтобы запомнить: если socket.setdefaulttimeout никогда не бывает вызывается, по умолчанию время ожидания равно None (нет времени ожидания).
Каково текущее состояние для 3.8?
Если время ожидания не установлено, почему я получил эту ошибку Error 504?
Подробнее:
Одна из ошибок показывает ошибку в
File "C:\Python38\lib\urllib\request.py", line 222, in urlopen
return opener.open(url, data, timeout)
Я открываю файл и прочитал:
def urlopen (url, data = None, timeout = socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile = None, capath = None, cadefault = False, context = None): '' 'Открыть URL-адрес URL, который может быть либо строкой, либо объект запроса.
*data* must be an object specifying additional data to be sent to
the server, or None if no such data is needed. See Request for
details.
urllib.request module uses HTTP/1.1 and includes a "Connection:close"
header in its HTTP requests.
The optional *timeout* parameter specifies a timeout in seconds for
blocking operations like the connection attempt (if not specified, the
global default timeout setting will be used). This only works for HTTP,
HTTPS and FTP connections.
Так же, как и (если не указано, глобальная настройка времени ожидания по умолчанию) будет использоваться) означает, что если у меня определена глобальная переменная с именем timeout , она будет использоваться как длительность тайм-аута?