Lexer Outputs "TypeError: write() argument must be str, not bytes" in Python. What am I doing wrong?

Lexer Outputs "TypeError: write() argument must be str, not bytes" in Python. What am I doing wrong?

如果这只是一个愚蠢的错误,我很抱歉,因为我对 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()。没有其他错误。

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

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

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

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

来自pickle.dump() docs

The file argument must have a write() method that accepts a single bytes argument.

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

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