《Python编程:从入门到实践》第17章添加自定义工具提示出错:AttributeError: ‘NoneType’ object has no attribute ‘decode’
Stack Overflow有人回答了这个问题,链接:https://stackoverflow.com/questions/56890528/nonetype-object-has-no-attribute-decode
问题就在于'label': repo_dict['description']
这一句并不会总会返回一个字符串,如:
"html_url": "https://github.com/shadowsocks/shadowsocks",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/shadowsocks/shadowsocks",
这是在浏览器访问API的结果,他这个就会直接返回一个空值,和返回空字符串还不一样。
In[10]:s= ''
type(s)
Out[11]: str
s = None
type(s)
Out[13]: NoneType
我写了另外一段代码:
plot_dict = [
{'value': 2333, 'label': 'Description of httpie.'},
{'value': 3333, 'label': 'Description of Django'},
{'value': 1234, 'label': None}
]
chart.add('', plot_dict)
chart.render_to_file('tooltip_demo.svg')
运行的结果和上述问题一样,这就说明 null 返回的是 None
File "C:\Users\hahag\anaconda3\lib\site-packages\pygal\_compat.py", line 61, in to_unicode
return string.decode('utf-8')
AttributeError: 'NoneType' object has no attribute 'decode'
查看_compat.py
源码:
def to_str(obj):
"""Cast obj to unicode string"""
if not is_str(obj):
return coerce(obj)
return obj
def to_unicode(string):
"""Force string to be a string in python 3 or a unicode in python 2"""
if not isinstance(string, coerce):
return string.decode('utf-8')
return string
可以看到在这里程序将字符串转化成绘图时可以理解的字符串,可是函数的接收值是None
,当然就会出错了。
解决办法上面的链接里已经说过了,'label': repo_dict['description'] or "None" #换成别的也可以
。
还有一个不太理解的就是每次绘图的结果都不同:
表示有点迷惑,返回的结果应该不会是变化的,难道每分每秒都有十几个大项目完工吗?
新人第一次写博客,一些功能还没摸清楚,有些术语也不尽规范,欢迎指教和讨论 LOL