设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第45课】 查天气(3)

[复制链接]

0

主题

0

好友

20

积分

新手上路

Rank: 1

61#
发表于 2016-3-5 10:06:50 |只看该作者
Traceback (most recent call last):
  File "C:\Users\admin\py实验\weather\weather.py", line 16, in <module>
    data=json.loads(content)
  1. from urllib import request
  2. from city import city

  3. print('你想查询哪个城市的天气?')
  4. cityname=input()
  5. citycode=city.get(cityname)
  6. if citycode:
  7.    
  8.     url = 'http://www.weather.com.cn/data/cityinfo/%s.html' % citycode
  9.     web=request.urlopen(url)
  10.     content=str(web.read())
  11.     print(type(content))
  12.     print(content)

  13.     import json
  14.     data=json.loads(content)
  15.     print(data)
复制代码
File "C:\Python34\lib\json\__init__.py", line 318, in loads
    return _default_decoder.decode(s)
  File "C:\Python34\lib\json\decoder.py", line 343, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python34\lib\json\decoder.py", line 361, in raw_decode
    raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 1 (char 0)
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

62#
发表于 2016-3-5 10:30:57 |只看该作者
vincent1456 发表于 2016-3-5 10:06
Traceback (most recent call last):
  File "C:%users\admin\py实验\weather\weather.py", line 16, in
  ...

content好像是none没取到值。你确认下每一步的值。你用的python3吧,可能有些函数用法不一样
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

63#
发表于 2016-3-5 10:35:12 |只看该作者
王大锤 发表于 2016-3-5 00:41
先生,已经把文件名从try改成lesson43,可是错误还是没有变化

第一行coding没起作用,你是不是用了中文冒号。或者你这个编辑器有其它编码设置。不行换个编辑器试下。还有你下面的缩进不对
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

64#
发表于 2016-3-5 10:59:41 |只看该作者
crossin先生 发表于 2016-3-5 10:30
content好像是none没取到值。你确认下每一步的值。你用的python3吧,可能有些函数用法不一样 ...

是的,python3有很多不懂的地方也查不到教程,为了更好地学习,现在已经换成了python27,谢谢您!
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

65#
发表于 2016-3-7 20:45:04 |只看该作者
  1. # -*- coding:cp936 -*-
  2. import urllib.request
  3. import json
  4. from city import city

  5. cityname = input('你想查询哪个城市?\n')
  6. citycode = city.get(cityname)
  7. if citycode:
  8.     try:
  9.         url = ('http://www.weather.com.cn/data/cityinfo/%s.html'%citycode)
  10.         content = urllib.request.urlopen(url).read()
  11.         data = json.loads(content.decode('utf-8'))
  12.         result = data['weatherinfo']
  13.         str_temp = ('%s\n%s~%s')%(
  14.                 result['weather'],
  15.                 result['temp1'],
  16.                 result['temp2']
  17.                 )
  18.         print(str_temp)
  19.     except:
  20.         print('查询失败')
  21. else:
  22.     print('你所查询的城市不存在!')
复制代码
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

66#
发表于 2016-3-21 11:50:01 |只看该作者
python中'' 和None的区别是什么
如何看一个方法的返回值

        citycode = city.get(cityname)
        if citycode == None: #if citycode == ''   
        city.get()的返回值是什么
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

67#
发表于 2016-3-21 12:35:43 |只看该作者
hefengair 发表于 2016-3-21 11:50
python中'' 和None的区别是什么
如何看一个方法的返回值

None是专门的空值,''有值,只是这个值是空字符。
程序如何判断,要看你需要判断什么。这里get方法如果取不到值会返回None,所以你应该判断None。
另外,也可以直接用
if citycode:
因为不管None还是'',它们转成bool值都是False
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

12

积分

新手上路

Rank: 1

68#
发表于 2016-5-1 10:52:21 |只看该作者
先生你好,
debug时我发现程序在
data = json.loads(content)
会出现错误。
错误报告:ValueError: No JSON object could be decoded
经检查是由于content的内容出现了乱码,即没有出现应有的字典型的数据。
困扰我的一点是这个错误出现的原因我不清楚,有时候我只是改了一个变量程序又会正常运行,请问content出现乱码的原因是什么呢?该如何解决这个问题呢?
回复

使用道具 举报

0

主题

0

好友

4

积分

新手上路

Rank: 1

69#
发表于 2016-5-1 13:52:25 |只看该作者
好奇怪,查询杭州、天津可以,北京、上海却查询失败,用的是先生的city.py
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

70#
发表于 2016-5-1 22:05:09 |只看该作者
AvyMiz 发表于 2016-5-1 10:52
先生你好,
debug时我发现程序在
data = json.loads(content)

部分中文乱码是编码问题,要手动解码。全乱码可能是网站用了gzip压缩,需要解压,见这里:http://bbs.crossincode.com/forum ... amp;page=13#pid9075
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-28 15:56 , Processed in 0.032354 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部