微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

inkex.py TypeError:write参数必须为str,而不是字节

如何解决inkex.py TypeError:write参数必须为str,而不是字节

我正在尝试解决与Inkscape一起分发的inkex.py内部函数中的问题。功能

        def output(self):
        """Serialize document into XML on stdout"""
        original = etree.tostring(self.original_document)        
        result = etree.tostring(self.document)        
        if original != result:
            self.document.write(sys.stdout)

错误消息是“ TypeError:write()参数必须为str,而不是字节”。我认为这是Python 3 TypeError: must be str,not bytes with sys.stdout.write()中讨论的编码问题,但由于无法看到sys.stdout中对self.document.write(sys.stdout)的任何输入,因此我无法理解输入如何传递。原始资源可能是为Python 2编写的,但是我的系统中有Python 3。

这用于在inkscape程序中拆分文本,完整的错误消息如下:

    Traceback (most recent call last):
    File "split.py",line 218,in <module>
    b.affect()
    File "C:\Program Files\Inkscape\share\extensions\inkex.py",line 285,in affect
    self.output()
    File "C:\Program Files\Inkscape\share\extensions\inkex.py",line 272,in output
    self.document.write(sys.stdout)
    File "src\lxml\etree.pyx",line 2057,in lxml.etree._ElementTree.write
    File "src\lxml\serializer.pxi",line 758,in lxml.etree._tofilelike
    File "src\lxml\etree.pyx",line 318,in lxml.etree._ExceptionContext._raise_if_stored
    File "src\lxml\serializer.pxi",line 682,in lxml.etree._FilelikeWriter.write
    TypeError: write() argument must be str,not bytes

解决方法

我正在使用Inkscape 0.92版,此后我不知道要发布什么,但是1.0是最近发布的。

但是,我通过更改以下行来解决了问题

if original != result:
            self.document.write(sys.stdout)

if original != result:
            self.document.write(sys.stdout.buffer)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。