因此,我花了我一段时间才确定了这一问题的原因,但仍然无法解决问题。我最近切换到python3和我尝试导入matplotlib当这个巨大的错误:为什么我从源文件中获取非有效unicode(但仅在导入matplotlib时)才会出现此错误
Traceback (most recent call last):
File "C:/Users/y2kbugger/Desktop/test.py", line 6, in <module>
File "C:\Anaconda2\envs\mypackage\lib\site-packages\matplotlib\__init__.py", lin
e 124, in <module>
from matplotlib.rcsetup import (defaultParams,
File "C:\Anaconda2\envs\mypackage\lib\site-packages\matplotlib\rcsetup.py", line
30, in <module>
from matplotlib.fontconfig_pattern import parse_fontconfig_pattern
File "C:\Anaconda2\envs\mypackage\lib\site-packages\matplotlib\fontconfig_patter
n.py", line 25, in <module>
from pyparsing import Literal, ZeroOrMore, \
File "C:\Anaconda2\envs\mypackage\lib\site-packages\pyparsing.py", line 3539, in
<module>
_escapedPunc = Word(_bslash, r"\[]-*.$+^?()~ ", exact=2).setParseAction(la
mbda s,l,t:t[0][1])
File "C:\Anaconda2\envs\mypackage\lib\site-packages\pyparsing.py", line 966, in
setParseAction
self.parseAction = list(map(_trim_arity, list(fns)))
File "C:\Anaconda2\envs\mypackage\lib\site-packages\pyparsing.py", line 813, in
_trim_arity
this_line = extract_stack()[-1]
File "C:\Anaconda2\envs\mypackage\lib\site-packages\pyparsing.py", line 797, in
extract_stack
frame_summary = traceback.extract_stack()[offset]
File "C:\Anaconda2\envs\mypackage\lib\traceback.py", line 207, in extract_stack
stack = StackSummary.extract(walk_stack(f), limit=limit)
File "C:\Anaconda2\envs\mypackage\lib\traceback.py", line 358, in extract
f.line
File "C:\Anaconda2\envs\mypackage\lib\traceback.py", line 282, in line
self._line = linecache.getline(self.filename, self.lineno).strip()
File "C:\Anaconda2\envs\mypackage\lib\linecache.py", line 16, in getline
lines = getlines(filename, module_globals)
File "C:\Anaconda2\envs\mypackage\lib\linecache.py", line 47, in getlines
return updatecache(filename, module_globals)
File "C:\Anaconda2\envs\mypackage\lib\linecache.py", line 137, in updatecache
lines = fp.readlines()
File "C:\Anaconda2\envs\mypackage\lib\codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 308: invali
d start byte
注释掉import matplotlib as mpl
导致不发生错误。这导致我误入歧途,尝试不同的matplot,numpy等组合。迷惑我的部分是,如果我删除评论(我从网上粘贴的),错误实际上是固定的。我的编辑是vim。我猜utf-8不是vim用来编写文件的编码。
最小误差产生例如:
# -*- coding: utf-8 -*-
import matplotlib as mpl
# Bad character pasted into vim from chrome: –
要修正只是删除 “EN DASH”(或整个线3)和进口matplotlib正确。 (?)
那么,为什么在评论中无效的Unicode只是想import matplotlib
(它甚至达到了有问题的评论之前)
python==3.5.2
colorama==0.3.7
comtypes==1.1.2
cycler==0.10.0
matplotlib==1.5.1
numpy==1.11.1
pandas==0.18.1
py==1.4.31
pyparsing==2.1.4
pytest==2.9.2
python-dateutil==2.5.3
pytz==2016.6.1
pywin32==220
scikit-learn==0.17.1
scipy==0.18.0
six==1.10.0
在pyparsing中查看此代码时,当尝试查看是否会在调用者代码或pyparsing代码中引发潜在异常时,会出现此问题。我已在早上检查了SVN中提出的修复方案,以限制调用堆栈的级别pyparsing在做出这个决定时检索 - 请下载并尝试。 (当然,我正在更新我的单元测试,但不知道我能否重现这个特定的错误情况。) – PaulMcG
pyparsing 2.1.8只是推到PyPI上 - 请执行'pip install -U pyparsing'来获取最新版本,并且重试你的脚本。 – PaulMcG
@PaulMcGuire刚做了一个比较直接的比较,我可以确认该更新修复了我的问题。谢谢! – Zak