我发现并修改了简单的代码,使用openweather和json格式在Python中获取天气状况。但我有一个问题 - 我怎么能说这座城市不对?
我的意思是,即使我通过一个错误的,不存在的城市,阅读总是给出一个答案(没有像'空响应'这样的东西)。
请参阅下面的代码,看看我在说什么:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib2, json
city = "etre4t5r5e4re" # the city name is incorrent
url = "http://openweathermap.org/data/2.1/forecast/city?q="
url += city
try :
request = urllib2.Request(url)
response = urllib2.urlopen(request)
except urllib2.HTTPError, e:
info = wx.MessageBox(u"Internet connection error", u"Error", wx.OK | wx.ICON_ERROR)
except urllib2.URLError, e:
info = wx.MessageBox(u"Internet connection error", u"Error", wx.OK | wx.ICON_ERROR)
except httplib.HTTPException, e:
info = wx.MessageBox(u"Internet connection error", u"Error", wx.OK | wx.ICON_ERROR)
except Exception:
info = wx.MessageBox(u"Error", u"Error", wx.OK | wx.ICON_ERROR)
weather = response.read()
if __name__ == '__main__':
print(weather) # it will show weather but thats not what I want for non-existing city!
答案 0 :(得分:1)
当请求的城市不存在时,有一个经常性ID,你可以根据你的代码,或者再发一次请求。我已经解释了我将使用的两种解决方案。
#!/usr/bin/python
import urllib2, json
city = "etre4t5r5e4re"
root = "http://openweathermap.org/data/2.1/forecast/city?q=%s"
url = root % city
response = urllib2.urlopen(url)
j = json.load(response)
# Solution 1
if j.get('url', '').split('/')[-1] == '7284885':
print " ! This city seems to be THE Unknown city"
# Solution 2
if 'No station' in urllib2.urlopen(j.get('url')).read():
print " ! Again.. This city seems to be THE Unknown city"