Ошибка Pydot, связанная с анализом символа ':', за которым следует число
Поэтому я использовал pydot в python 2.7 от Anaconda и заметил, что я получаю ошибки, когда пытаюсь использовать определенные строки в 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 ':' в надежде эмулировать решение проблемы некомпилирования новых строк '\ n', поскольку pydot требует, чтобы они были перечислены как r '\ n', где r явно не определено.
Согласно:
1 ответ
Я обнаружил эту проблему под номером 38 - в которой говорится, что мы не можем использовать специальные символы (например, двоеточие) в именах узлов или метках. Причина, по которой он подчеркнул, -
Как и в вопросе 28: проблема с двоеточием в именах узлов заключается в том, что Graphviz будет использовать их для указания порта, к которому нужно присоединить ребра, это артефакт Graphviz. Способ, которым pydot поддерживает их, состоит в том, чтобы разрешить их в именах, если вы хотите, чтобы в имени были символы двоеточия, просто добавьте кавычки в строку.
Например: (обратите внимание на двойные кавычки в фактической строке):
node = pydot.Node('"Testnode:###@"') print node.get_name() '"Testnode:###@"'
Хотя вам может быть лучше не иметь двоеточие в вашем имени.