在网上查了半天,加上调试,总算稀里糊涂地解决了,自答一波吧
1、首先定位到报错的地方
def _html(self):
with open(os.path.join(os.path.dirname(__file__), 'plot.j2')) as f:
template = f.read()
这里open的默认编码方式是cp936,查了下跟gbk差不多。打开plot.j2文件(位于Echarts安装目录下),结合报错的信息,发现可能是plot.j2文件中存在的中文字符造成的,于是将open的方式改为如下并再次运行:
with open(os.path.join(os.path.dirname(__file__), 'plot.j2'), encoding='utf-8') as f:
2、出现了新的错误:
File "D:\Program Files\Python\lib\site-packages\echarts\__init__.py", line 105, in plot
fobj.write(self._html())
File "D:\Program Files\Python\lib\tempfile.py", line 483, in func_wrapper
return func(*args, **kwargs)
TypeError: a bytes-like object is required, not 'str'
从错误的字面意思上看,需要输入的应该是字节,而不是str。所以这里需要将str编码后再进行输入,考虑将write改为如下:
fobj.write(self._html().encode('utf-8'))
此时再运行,例子终于编过了,结果图是在浏览器中打开的
3、总结
错误的原因就在于plot.j2文件中含有的中文字符,只需要指定编码格式为utf-8就OK了(好像这个错误在python2.x版本不会报错。。)另外PyCharm挺好用的,在调试的时候帮助定位了plot.j2文件的位置