NameError:未定义全局名称'dot_parser'

时间:2016-03-07 15:15:18

标签: python python-2.7 scikit-learn pyparsing pydot

我正在使用决策树算法并尝试绘制树。但是,IDE报告了以下错误:

Couldn't import dot_parser, loading of dot files will not be possible.
<class 'pandas.core.frame.DataFrame'>
    Traceback (most recent call last):
      File "C:/Users/s152730/Desktop/exe1.py", line 70, in <module>
        graph = pydot.graph_from_dot_data(test.getvalue())
      File "C:\Python27\lib\site-packages\pydot.py", line 220, in graph_from_dot_data
        return dot_parser.parse_dot_data(data)
    NameError: global name 'dot_parser' is not defined

我不知道如何处理这个问题,因为我试图卸载并重新安装pydot dan pyparsing,这是在其他答案中提出的,但它没有帮助。

这是我的代码:

from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import ExtraTreeClassifier
from sklearn import tree
from sklearn.externals.six import StringIO
import pydot
from IPython.display import Image

test = StringIO()
tree.export_graphviz(clf, out_file=test, feature_names = attribute_names)
graph = pydot.graph_from_dot_data(test.getvalue())
graph.writepng('test.png')
image(filename = 'test.png')

我正在使用python2.7并在PyCharm上运行,操作系统是win8.1。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

由于安装顺序不正确,您的错误似乎是遗漏了部分库(pyparsing)。

请参阅herehere

  

明确了发起但不是新手:解决方法是   安装pyparsing&lt;在安装pydot(或包)之前的2.0.0   这取决于pydot。)

     

$ pip install pyparsing == 1.5.7

解决方案似乎是首先删除pydotpyparsing,然后先安装pyparsing,然后安装pydot

将要安装的版本很可能在将来发生变化,所以目前您似乎需要运行以下内容:(取自this可爱答案)

pip uninstall pyparsing
pip install -Iv https://pypi.python.org/packages/source/p/pyparsing/pyparsing-1.5.7.tar.gz#md5=9be0fcdcc595199c646ab317c1d9a709
pip install pydot

答案 1 :(得分:2)

对我来说,我发现一个很好的建议是安装pydotplus,因为它与pyparsing v2.0及更高版本兼容。它还具有可以与Anaconda的graphviz安装一起使用的优点。我使用Anaconda v2.4.1和Windows 7 x64以及使用condas安装的Graphviz 2.38。

答案 2 :(得分:2)

我刚刚将pydot更新为1.2.3,错误消失了。

sudo pip install -U pydot