【问题标题】:Lexer Outputs "TypeError: write() argument must be str, not bytes" in Python. What am I doing wrong?Lexer 在 Python 中输出“TypeError: write() argument must be str, not bytes”。我究竟做错了什么?
【发布时间】:2016-03-12 11:05:17
【问题描述】:

如果这只是一个愚蠢的错误,我很抱歉,因为我在 Python 或编程方面几乎没有经验。 pickle.dump(code, output)不喜欢我给出的论点。我该如何解决这个问题?

这是将我的文件输出到 lexer_output.txt 的示例代码:

global output
output = open ("C:\\Users\Asher\Documents\BUSlang\lexer_output", "w")
pickle.dump(code, output)

错误是

"TypeError: write() argument must be str, not bytes"

变量code 之前在脚本code=meta.read() 中定义。没有其他错误。

【问题讨论】:

  • 您使用的是 Python 2 还是 Python 3? meta 是什么?
  • 我使用的是 Python 3.5。为什么要问?
  • metawith open ("C:\\Users\Asher\Documents\BUSlang\code.txt", "r") as meta: 中被声明为ish,code 在其范围内被声明,如果我使用正确的话。
  • 我应该改用"r+"吗?

标签: python lexer


【解决方案1】:

错误消息不是很有帮助。经过一些试验和错误后,我得到了它的使用

output = open("C:\\Users\Asher\Documents\BUSlang\lexer_output", "wb")

即您要写入的输出文件必须以二进制模式打开。

另一个注意事项:我不确定您为什么使用global output,在您的示例代码中不需要它。

【讨论】:

    【解决方案2】:

    来自pickle.dump() docs

    文件参数必须有一个write() 方法,该方法接受单个 bytes 参数。

    "w" 文件模式意味着write() 接受str 对象,而不是bytes,而是通过"wb"

    您应该传递的是二进制文件,而不是文本模式下打开的文件。

    【讨论】:

      猜你喜欢
      • 2020-05-29
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 2019-05-10
      • 2012-12-04
      • 2020-03-28
      相关资源
      最近更新 更多