urlopen работает в Python 2.7, но не работает в Python 3.4

На моем компьютере работают как Python 2.7.10, так и Python 3.4.4. Следующий код работает в Python 2.7.10:

import urllib2
print urllib2.urlopen('http://google.com').read()

Однако, если я перейду к Python 3.4.4 и запущу

import urllib.request
print(urllib.request.urlopen('http://google.com').read())

Я получаю длинную пару ошибок:

Traceback (most recent call last):
  File "C:\Python34\lib\urllib\request.py", line 1183, in do_open
    h.request(req.get_method(), req.selector, req.data, headers)
  File "C:\Python34\lib\http\client.py", line 1137, in request
    self._send_request(method, url, body, headers)
  File "C:\Python34\lib\http\client.py", line 1182, in _send_request
    self.endheaders(body)
  File "C:\Python34\lib\http\client.py", line 1133, in endheaders
    self._send_output(message_body)
  File "C:\Python34\lib\http\client.py", line 963, in _send_output
    self.send(msg)
  File "C:\Python34\lib\http\client.py", line 898, in send
    self.connect()
  File "C:\Python34\lib\http\client.py", line 871, in connect
    self.timeout, self.source_address)
  File "C:\Python34\lib\socket.py", line 516, in create_connection
    raise err
  File "C:\Python34\lib\socket.py", line 507, in create_connection
    sock.connect(sa)
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    print(urllib.request.urlopen('http://google.com').read())
  File "C:\Python34\lib\urllib\request.py", line 161, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Python34\lib\urllib\request.py", line 464, in open
    response = self._open(req, data)
  File "C:\Python34\lib\urllib\request.py", line 482, in _open
    '_open', req)
  File "C:\Python34\lib\urllib\request.py", line 442, in _call_chain
    result = func(*args)
  File "C:\Python34\lib\urllib\request.py", line 1211, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "C:\Python34\lib\urllib\request.py", line 1185, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond>

Я понял, что такая ошибка представляет собой проблемы с настройками Windows, как предложено здесь (у меня Windows 7), но я не могу понять, как это работает в 2.7, а не в 3.4.


person Lucius Silanus    schedule 08.06.2016    source источник
comment
Думаю, они изменили имя пакета...   -  person linusg    schedule 08.06.2016
comment
Рекомендация: просто используйте запросы.   -  person Alyssa Haroldsen    schedule 08.06.2016
comment
С Python 3.2.3 в GNU/Linux это работает нормально. Возможно, проблема с компиляцией Windows...   -  person kivy_student    schedule 08.06.2016
comment
Я протестировал это локально (в Windows 7; Python 3.5.0), и у меня это сработало.   -  person jacob    schedule 08.06.2016
comment
Так что это не проблема с кодом Python, а где-то еще. У меня есть соблазн просто использовать 2.7 для этого проекта вместо того, чтобы пытаться отследить проблему, но я бы предпочел решить проблему, чем избежать ее...   -  person Lucius Silanus    schedule 08.06.2016
comment
Я бы предложил использовать что-то вроде Wireshark для проверки сетевого трафика.   -  person nephtes    schedule 08.06.2016
comment
@shivsn, в отличие от предложенной вами ссылки, работает в версии 2.7. На самом деле это сообщение, в котором мне предложили, что это должна быть проблема с настройкой Windows, а не проблема с моим кодом (я отредактирую, чтобы отразить это). Я пытаюсь понять, как это работает в 2.7, а не в 3.4...   -  person Lucius Silanus    schedule 08.06.2016
comment
Я попробовал это на ubuntu python 3.4.0, и это работает.   -  person shivsn    schedule 08.06.2016


Ответы (1)


После работы над решением код Python 2.7 начал выдавать ту же ошибку. Из-за разочарования я начал применять исправление microscoft. Я начал с того, что вышел из системы и снова зашел. Теперь все работает как задумано...

person Lucius Silanus    schedule 08.06.2016