LiMingyang's Blog

Sharing personal learning experience

python-study-experience-1

引言:最近在自学Python,学习基础部分用的书是《Python编程——从入门到实践》2016版(最新版借不到),很经典的一本书。除了“外星人入侵”和“Web应用程序”这两个项目感觉不是很有必要,其他部分都看完了。然后,在数据可视化的其中一节,我发现了一个书里的bug。如果有最新版书的小伙伴,可以查证一下,看这个bug还在不在。如果有学习Python的好的书或课程,也可以推荐给我一下,不胜感激。

关于该bug的说明

  • 位于P349页,”python_repos.py”的部分代码。

python_repos.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--snip--
#研究有关仓库的信息
repo_dicts = response_dict['item']
print("Number of items:", len(repo_dicts))

names, plot_dicts = [], []
for repo_dict repodicts:
names.append(repo_dict['name'])

plot_dict = {
'value': repo_dict['stargazers_count'],
'label': repo_dict['description'],
}
plot_dicts.append(plot.dict)

#可视化
my_style = LS('#333366', base_style=LCS)
--snip--

chart.add('', plot_dicts)
chart.render_to_file('pthon_repo.svg')
  • 本节的目的是用API调用返回Github上30个项目,然后按照得到stars的数量排序,利用Pygal做一个条形图。

  • 问题出在如上所示代码的第12行“’label’: repo_dict[‘description’]”,这一行的作用是获得每一个项目的“description”。但不是所有的项目都有description(虽然一般受欢迎的项目都有),我测试代码时获取的前30个项目中的第28名就没有description,然后会报错“NoneType”。具体情况见下图。一个大瓜

  • 解决方法也很简单,就是判断一下有没有“description”.代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--snip--
for repo_dict in repo_dicts:
names.append(repo_dict['name'])
stars.append(repo_dict['stargazers_count'])
plot_dict = {
'value': repo_dict['stargazers_count'],
'xlink': repo_dict['html_url'],
#'label': repo_dict['description']
}
if repo_dict['description'] == None:
plot_dict['label'] = 'No description'
else:
plot_dict['label'] = repo_dict['description']
plot_dicts.append(plot_dict)
--snip--
  • 正常情况下的运行结果是这样的:一个大瓜该图链接(注:查看原图可以获得更多信息)

  • 但是,为什么这个项目没有description呢?我很好奇,就去看了看,然后发现一个大瓜,好奇读者可以自行去查看。

-------------本文结束 感谢阅读-------------