【问题标题】:TypeError: initial_value must be str or None, not _io.BytesIOTypeError:initial_value 必须是 str 或 None,而不是 _io.BytesIO
【发布时间】:2018-11-25 04:37:20
【问题描述】:

大家好...

我在odoo8版本中有一个模块,它包含在读取文件代码中导入库存调整中的产品和数量

import cStringIO


data = base64.b64decode(self.data)

self.data contain the file path..

file_input = cStringIO.StringIO(data)

在 odoo8 中运行良好。

我想在odoo11中实现这个模块

在 odoo python 版本中改变了它不知道 cStringIO 的方式。它只知道 StringIO

from io import StringIO

import io

data = base64.b64decode(self.data)

file_input = io.StringIO(data)

raise error 

TypeError: initial_value must be str or None, not bytes

我更改了上面几行的代码 但它不接受数据。因为是返回字节形式,这里要字符串

接下来我用过

file_input = io.BytesIO(data) -->this

raise the error

TypeError: initial_value must be str or None, not bytes

请任何人帮我纠正这个问题...

提前谢谢..

【问题讨论】:

  • 您的最后一个错误毫无意义。该错误意味着您尝试将io.BytesIO 传递给io.StringIO。发一个真实的minimal reproducible example;您提供的内容无法重现。
  • data = base64.b64decode(self.data) file_input = cStringIO.StringIO(data) file_input.seek(0)
  • 但它在 odoo11 中不起作用。对于 odoo11 工作我想改变什么。问题是总这一行 file_input = cStringIO.StringIO(data)
  • 是的,你说过。但是你声称io.BytesIO(data) 有同样的错误,它不应该。您需要澄清问题(编辑问题,解决问题,不要发布 cmets,尤其是无法在 cmets 中格式化的代码)。
  • 好的,我已经编辑了这个问题。那么请告诉我你对如何将解码 csv 文件从字节更改为字符串有任何想法......我已经坚持了这一行

标签: python-3.x python-2.7 io odoo-8 odoo-11


【解决方案1】:

替换这个:

data = base64.b64decode(self.data)

到:

data = base64.b64decode(self.data).decode('utf-8')

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2017-01-12
    相关资源
    最近更新 更多