簡體   English   中英

inkex.py TypeError: write() 參數必須是 str,而不是字節

[英]inkex.py TypeError: write() argument must be str, not bytes

我正在嘗試解決與 Inkscape 一起分發的 inkex.py 中的 function 中的問題。 function 是

        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()中討論的編碼問題,但我不明白輸入是如何在這里傳遞的,因為我看不到任何輸入self.document.write(sys.stdout) sys.stdout的 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM