【问题标题】:Python3 | Expected type 'union[bytes, bytearray], got 'str' instead [duplicate]Python3 |预期类型'union [bytes,bytearray],得到'str'而不是[重复]
【发布时间】:2019-03-07 14:51:22
【问题描述】:

我有一个使用 python 的稳定工作项目。它在 python 2.7 上运行。我将它升级到 python 3.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'

我需要你的帮助!

【问题讨论】:

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


【解决方案1】:

您正在将字符串 (Unicode) 写入 BytesIO 对象。您可能应该将 BytesIO 切换为 StringIO。如果你真的想要字节,你可以使用他们的 encode() 方法将你的 Unicode 字符串转换为字节,传递你喜欢的编码方案(例如'utf-8')。

【讨论】:

    【解决方案2】:

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

    csv.write(my_text)
    

    csv.write(my_text.encode())
    

    将其转换为二进制。

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 2017-01-19
      • 2016-01-27
      • 2019-11-15
      • 1970-01-01
      • 2019-08-27
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多