首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Weather-API模块- Errno 11001: getaddrinfo失败错误

Python Weather-API模块- Errno 11001: getaddrinfo失败错误
EN

Stack Overflow用户
提问于 2019-05-05 09:03:44
回答 1查看 704关注 0票数 0

最近,我又回到了我的一些代码,这些代码过去在weather api模块(https://pypi.org/project/weather-api/)中工作得很好。然而,现在它只是抛出了一个很长的错误,我不知道该如何处理。

我已经将错误追溯到weather.py,并尝试使用time.sleep()人为地降低请求速率,但是没有效果。

代码语言:javascript
复制
from weather import Weather , Unit
weather = Weather(unit=Unit.CELSIUS)
location = weather.lookup_by_location('London')

这将产生以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\urllib3\connection.py", line 141, in _new_conn
    (self.host, self.port), self.timeout, **extra_kw)
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\urllib3\util\connection.py", line 60, in create_connection
    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
  File "D:\Program Files\Python\lib\socket.py", line 745, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\urllib3\connectionpool.py", line 601, in urlopen
    chunked=chunked)
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\urllib3\connectionpool.py", line 357, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "D:\Program Files\Python\lib\http\client.py", line 1239, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "D:\Program Files\Python\lib\http\client.py", line 1285, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "D:\Program Files\Python\lib\http\client.py", line 1234, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "D:\Program Files\Python\lib\http\client.py", line 1026, in _send_output
    self.send(msg)
  File "D:\Program Files\Python\lib\http\client.py", line 964, in send
    self.connect()
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\urllib3\connection.py", line 166, in connect
    conn = self._new_conn()
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\urllib3\connection.py", line 150, in _new_conn
    self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x0398B1B0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\requests\adapters.py", line 440, in send
    timeout=timeout
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\urllib3\connectionpool.py", line 639, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\urllib3\util\retry.py", line 388, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='query.yahooapis.com', port=80): Max retries exceeded with url: /v1/public/yql?q=select*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text='London')%20and%20u='c'%20&format=json (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0398B1B0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    location = weather.lookup_by_location('London')
  File "D:\Program Files\Python\lib\site-packages\weather\weather.py", line 27, in lookup_by_location
    self.URL, location, self.unit)
  File "D:\Program Files\Python\lib\site-packages\weather\weather.py", line 38, in _call
    def _call(self, url):
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\requests\api.py", line 72, in get
    return request('get', url, params=params, **kwargs)
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\requests\api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\requests\sessions.py", line 508, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\requests\sessions.py", line 618, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\Me\AppData\Roaming\Python\Python36\site-packages\requests\adapters.py", line 508, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='query.yahooapis.com', port=80): Max retries exceeded with url: /v1/public/yql?q=select*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text='London')%20and%20u='c'%20&format=json (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0398B1B0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed',))

现在尝试解构Ln: 38处的D:\Program Files\Python\Lib\site-packages\weather\weather.py错误(在_call()函数中),如下所示:

代码语言:javascript
复制
def _call(self, url):
    req = requests.get(url)
    print('here') # my addition to the code. This is never reached.
    if self.log:
        self.logger.info("Request URL: %s" % req.url)
        self.logger.info("Status Code: %s" % req.status_code)
        self.logger.info("JSON Response: %s" % req.content)
    if not req.ok:
        req.raise_for_status()

    try:
        results = req.json()
        if self.log:
            self.logger.info(results)
        if int(results['query']['count']) > 0:
            wo = WeatherObject(results['query']['results']['channel'])
            return wo
        else:
            if self.log:
                self.logger.warn("No results found: %s " % results)
            return
    except Exception as e:
        self.logger.warn(e)
        self.logger.warn(req.content)
        sys.exit(0)

我不知道为什么requests模块会导致这个错误,有谁知道解决方案吗?

预期结果:一个类对象,它应该包含来自雅虎天气的数据,可以用location.text将其读取为字符串。

实际结果:错误:/

EN

回答 1

Stack Overflow用户

发布于 2019-05-06 00:44:10

雅虎的天气API被弃用了!谁能想到。

(意思是尝试在雅虎网址上运行requests.get(url),但不再有效,没有得到正确的结果)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55988049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档