导入matplotlib时出现Python Unicode解码错误

3

我尝试在我的Python脚本中使用matplotlib,但是在终端中出现了以下错误:

Traceback (most recent call last):
  File "graphique.py", line 5, in <module>
    import matplotlib.pyplot as plt
  File "/home/xavier/anaconda/lib/python2.7/site-packages/matplotlib/__init__.py", line 1048, in <module>
    rcParams = rc_params()
  File "/home/xavier/anaconda/lib/python2.7/site-packages/matplotlib/__init__.py", line 897, in rc_params
    fname = matplotlib_fname()
  File "/home/xavier/anaconda/lib/python2.7/site-packages/matplotlib/__init__.py", line 748, in matplotlib_fname
    fname = os.path.join(os.getcwd(), 'matplotlibrc')
  File "/home/xavier/anaconda/lib/python2.7/posixpath.py", line 80, in join
    path += '/' + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 66: ordinal not in range(128)

这是我的Python代码,我只是简单地编写了它。

# -*- coding: utf-8 -*-
import numpy as np
from math import *
import matplotlib.pyplot as plt

我需要做什么?


如果您刚刚启动交互式解释器并键入 import matplotlib.pyplot,是否会出现相同的错误? - abarnert
1
另外,运行这个程序时你在哪个目录下?你使用的是什么平台?(看起来像是linux或*BSD,但我指的是具体的发行版和版本号。)因为看起来(a)你当前的工作目录中有非ASCII字符,以及(b)你的语言环境设置可能不是UTF-8,或者是UTF-8但你的文件系统却不是。 - abarnert
@abarnert 我使用的是Ubuntu 14.04,你说得对,我的目录名中有一个“é”字母!我将其改正后,现在已经可以工作了!非常感谢! - fonfonx
1个回答

3
问题在于您的当前工作目录中有一个非ASCII字符。
实际上这本不应该成为问题,但由于其他一些因素导致了问题:
- matplotlib想要查找您当前工作目录中的本地matplotlibrc文件,该文件会覆盖默认文件。 - Python认为您正在使用C语言环境而不是Ubuntu 14应默认使用的漂亮的UTF-8语言环境。
因此,为了快速解决问题,请从没有非ASCII字符的不同目录运行脚本。
如果您真的想要解决问题,请执行以下操作:
- 确保您拥有最新的Ubuntu 14、Anaconda和matplotlib。 - 从shell中运行"echo $LANG"。结果应为空或包含"UTF-8"。如果不是,请搜索AskUbuntu以了解如何解决该问题。 - 确保您的shell和终端都设置为UTF-8。
从快速搜索 matplotlib 的问题来看,这似乎是 #3516 ,它看起来已经在 #3594 中修复了,我认为应该在 matplotlib 1.4.1+ 中。还请参见 #3487。因此,假设您的 $LANG 和终端是正确的,并且您的 matplotlib 是1.4.0或更早版本,则这是最可能的原因,更新它(通过 condapipapt-get 或更新 Anaconda 本身,无论您最初安装它的方式)应该可以解决问题。

当然,你也可以升级到Python 3,这可能会解决问题,或者给出更好的错误信息,告诉你究竟出了什么问题。 (尽管从扫描问题报告来看,似乎 matplotlib 1.4.0 在Python 3中没有这个精确的bug,只有在Python 2中存在,但它可能有一个相关的bug...)


解决这个问题,我只需要执行 apt-get updateapt-get upgrade 命令吗?另外两点都没问题(echo $LANG 返回 fr_FR.UTF-8,终端设置为 UTF-8)。 - fonfonx
@fonfonx:Anaconda是通过apt-get安装的吗?Matplotlib是通过apt-get安装的还是内置于Anaconda中的? - abarnert
matplotlib已经随着anaconda安装了,版本号为1.4.0,因此我正在更新它。 - fonfonx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接