jupyter笔记本中的python graphviz错误,带有UnicodeDecodeError

2024-06-02 04:42:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从Graphviz运行示例,但UnicodeDecodeError有一个问题

我在jupyter笔记本中运行了这个示例

from graphviz import Digraph, nohtml

g = Digraph('g', filename='btree.gv',
            node_attr={'shape': 'record', 'height': '.1'})

g.node('node0', nohtml('<f0> |<f1> G|<f2>'))
g.node('node1', nohtml('<f0> |<f1> E|<f2>'))
g.node('node2', nohtml('<f0> |<f1> B|<f2>'))
g.node('node3', nohtml('<f0> |<f1> F|<f2>'))
g.node('node4', nohtml('<f0> |<f1> R|<f2>'))
g.node('node5', nohtml('<f0> |<f1> H|<f2>'))
g.node('node6', nohtml('<f0> |<f1> Y|<f2>'))
g.node('node7', nohtml('<f0> |<f1> A|<f2>'))
g.node('node8', nohtml('<f0> |<f1> C|<f2>'))

g.edge('node0:f2', 'node4:f1')
g.edge('node0:f0', 'node1:f1')
g.edge('node1:f0', 'node2:f1')
g.edge('node1:f2', 'node3:f1')
g.edge('node2:f2', 'node8:f1')
g.edge('node2:f0', 'node7:f1')
g.edge('node4:f2', 'node6:f1')
g.edge('node4:f0', 'node5:f1')

g.view()

下面是完整的回溯。 我认为Jupiter无法解码“btree.gv”文件。 但我不知道如何修复它。 我尝试在g=Digraph(…)中添加编码,但没有成功。文件仍保存为utf-8

UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-1-661843ad24a0> in <module>
     23 g.edge('node4:f0', 'node5:f1')
     24 
---> 25 g.view()

~\Anaconda3\lib\site-packages\graphviz\files.py in view(self, filename, directory, cleanup, quiet, quiet_view)
    240         return self.render(filename=filename, directory=directory,
    241                            view=True, cleanup=cleanup,
--> 242                            quiet=quiet, quiet_view=quiet_view)
    243 
    244     def _view(self, filepath, format, quiet):

~\Anaconda3\lib\site-packages\graphviz\files.py in render(self, filename, directory, view, cleanup, format, renderer, formatter, quiet, quiet_view)
    207         rendered = backend.render(self._engine, format, filepath,
    208                                   renderer=renderer, formatter=formatter,
--> 209                                   quiet=quiet)
    210 
    211         if cleanup:

~\Anaconda3\lib\site-packages\graphviz\backend.py in render(engine, format, filepath, renderer, formatter, quiet)
    206     else:
    207         cwd = None
--> 208     run(cmd, capture_output=True, cwd=cwd, check=True, quiet=quiet)
    209     return rendered
    210 

~\Anaconda3\lib\site-packages\graphviz\backend.py in run(cmd, input, capture_output, check, quiet, **kwargs)
    169 
    170     if not quiet and err:
--> 171         _compat.stderr_write_bytes(err, flush=True)
    172     if check and proc.returncode:
    173         raise CalledProcessError(proc.returncode, cmd,

~\Anaconda3\lib\site-packages\graphviz\_compat.py in stderr_write_bytes(data, flush)
     60         """Encode data str and write to sys.stderr (flush if requested)."""
     61         encoding = sys.stderr.encoding or sys.getdefaultencoding()
---> 62         sys.stderr.write(data.decode(encoding))
     63         if flush:
     64             sys.stderr.flush()

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xad in position 20: invalid start byte

我希望得到你的帮助


Tags: inviewnodelibstderrfilenamegraphvizf2