《Python编程:从入门到实践》第17章添加自定义工具提示出错

《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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值