2

因此,我在 Anaconda 的 python 2.7 中使用了 pydot,并注意到当我尝试在 Pydot 中使用某些字符串时,我不断收到错误消息。

我隔离的错误是:

import pydot


graph = pydot.Dot(graph_type='digraph', rankdir = 'LR')
S = 'Total Flow Count ' + ':' + str(3)
legend = pydot.Node('Legend', label=S, shape='rectangle')

graph.add_node(legend)

每当我运行它时,我都会得到以下输出:

Traceback (most recent call last):
  File "path\of\my\code\errorisolate.py", line 13, in <module>
    graph.write_png('example5graph.png')
  File "c:\Anaconda\lib\site-packages\pydot.py", line 1609, in <lambda>
    lambda path, f=frmt, prog=self.prog : self.write(path, format=f, prog=prog))
  File "c:\Anaconda\lib\site-packages\pydot.py", line 1703, in write
dot_fd.write(self.create(prog, format))
  File "c:\Anaconda\lib\site-packages\pydot.py", line 1803, in create
status, stderr_output) )
InvocationException: Program terminated with status: 6. stderr follows: Error: c:\users\sidharth\appdata\local\temp\tmpxvwsls:3: syntax error near line 3

context: Legend [shape=rectangle, label=Total Flow Count >>>  : <<< 3];

到目前为止的分析/工作:

不知何故,冒号字符 ':' 后跟 str() 格式的数字的组合似乎会引发错误。我试图通过在前面附加“r”来修复它,因为我知道这是一种修复包含“\n”字符的错误的方法。但即便如此,也没有运气。

变化:

我删除了 r 因为它似乎引起了一些混乱。我一直保留 r':' 希望模拟非编译换行符 '\n' 问题的解决方案,因为 pydot 要求将它们列为 r'\n' ,其中 r 未明确定义。

按照:

Pydot 不能很好地处理换行符?

4

1 回答 1

4

我发现这个问题编号 38 - 这表示我们不能在节点名称或标签中使用特殊符号(如冒号)。它突出显示的原因是 -

与问题 28 一样:节点名称中冒号的问题是 Graphviz 将使用它们来指定连接边的端口,它是 Graphviz 工件。pydot 支持它们的方式是允许它们出现在名称中,如果您只想在名称中包含冒号字符,只需在字符串中添加引号即可。

例如:(注意实际字符串中的双引号):

node = pydot.Node('"Testnode:###@"')

print node.get_name()
'"Testnode:###@"'

虽然你的名字中没有冒号可能会更好。

于 2015-07-20T18:45:59.120 回答