在<<Python编程从入门到实践>>学习中,第15.4.6中对pyal库的使用报了一个错误。
报错全部信息如下:
Traceback (most recent call last):
File "die_visual.py", line 29, in <module>
hist.render_to_file('die_visual.svg')
File "C:\Users\lang\AppData\Roaming\Python\Python37\site-packages\pygal\ghost.py", line 165, in render_to_file
f.write(self.render(is_unicode=True, **kwargs))
File "C:\Users\lang\AppData\Roaming\Python\Python37\site-packages\pygal\ghost.py", line 122, in render
.make_instance(overrides=kwargs)
File "C:\Users\lang\AppData\Roaming\Python\Python37\site-packages\pygal\ghost.py", line 116, in make_instance
self.xml_filters)
File "C:\Users\lang\AppData\Roaming\Python\Python37\site-packages\pygal\graph\bar.py", line 37, in __init__
super(Bar, self).__init__(*args, **kwargs)
File "C:\Users\lang\AppData\Roaming\Python\Python37\site-packages\pygal\graph\base.py", line 47, in __init__
self.svg = Svg(self)
File "C:\Users\lang\AppData\Roaming\Python\Python37\site-packages\pygal\svg.py", line 50, in __init__
u('xml'), u("version='1.0' encoding='utf-8'"))]
File "src/lxml/etree.pyx", line 3039, in lxml.etree.ProcessingInstruction
ValueError: Invalid PI name 'b'xml''
书中的源码如下:
import pygal
from die import Die
#实例化D6
die = Die()
results=[]
for roll_number in range(1000): #随机产生1000个
results.append(die.roll()) #数据添加到列表中
#分析结果 记录每个出现的次数
frequencies=[]
for value in range(1,die.num_size+1):
frequency=results.count(value) #统计value值在其中出现的次数
frequencies.append(frequency)
print(frequencies)
#对结果进行可视化
hist=pygal.Bar() #创建一个实例
hist.title="Results of rolling one D6 1000" #字符串题目
hist.x_labels =['1','2','3','4','5','6'] #x轴的标签
hist.x_title = "Result" #x轴的名字
hist.y_title = "Frequency of Result" #y轴名字
hist.add('D6',frequencies)
hist.render_to_file('die_visual.svg')
只是在最后一句中才报错。
hist.render_to_file('die_visual.svg')
已查看成功安装导入了pygal包。
解决办法:
是由于pygal版本的原因造成了这个问题
在书中安装的命令为
python -m pip install --user pygal==1.7
安装的是1.7版本。
我们把他卸载了
pip uninstall pygal
安装一个稍微高一点一点的版本(好吧其实这个版本不高),就可以解决这个问题了。
python -m pip install --user pygal==2.3.1
最后展示一下自己的运行结果吧