Python3 |预期的类型为“ union [bytes,bytearray]”,而是使用“ str”

时间:2018-10-02 13:08:07

标签: python python-3.x python-2.7 csv odoo

我有一个稳定的python工作项目。它在python 2.7上运行。我将其升级到python3.x。因此,它不适用于Python3。

逻辑是将值写入csv文件。

破损的代码是:

csv = io.BytesIO()

csv.write('fiscalYear\t'
                      'VKN\t'
                      'recordPeriod\t'
                      'enteredBy\t'
                      'entredDate\t'
                      'entryNumber\t'
                      'entryComment\t'
                      'batchID\t'
                      'batchDescription\t'
                      'totalDebit\t'
                      'totalCredit\t'
                      'amountOriginalExchangeRate\t'
                      'amountOriginalExchangeRateSource\t'
                      'amountOriginalExchangeRateComment\n'
            )

return csv.getvalue()

我的问题是:

Expected type 'union[bytes, bytearray], got 'str' instead

Python日志错误:

TypeError: a bytes-like object is required, not 'str'

我需要你的帮助!

2 个答案:

答案 0 :(得分:0)

如错误消息所述,您应该传递二进制数据,而不是字符串。代替

csv.write(my_text)

csv.write(my_text.encode())

将其转换为二进制。

答案 1 :(得分:0)

您正在将字符串(Unicode)写入BytesIO对象。您可能应该将BytesIO切换为StringIO。如果您确实需要字节,则可以使用其encode()方法将Unicode字符串转换为字节,并传递您首选的编码方案(例如'utf-8')。