如何在 python 3 中修复此“ValueError:不能有无缓冲的文本 I/O”?

新手上路,请多包涵

这是麻省理工学院python项目的问题之一,但它基本上是为python 2.x用户编写的,那么有什么办法可以修复以下代码以在最新的python 3中运行?

当前代码引发“ValueError:不能有无缓冲的文本 I/O”

 WORDLIST_FILENAME = "words.txt"

def load_words():

    print("Loading word list from file...")

    inFile = open(WORDLIST_FILENAME, 'r', 0)
    # wordlist: list of strings
    wordlist = []
    for line in inFile:
        wordlist.append(line.strip().lower())
    print("  ", len(wordlist), "words loaded.")
    return wordlist

原文由 Richard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 841
2 个回答

来自 open 的文档字符串:

… buffering 是一个可选的整数,用于设置缓冲策略。传递 0 以关闭缓冲( 仅允许在二进制模式下使用)…

所以改变 inFile = open(WORDLIST_FILENAME, 'r', 0)

inFile = open(WORDLIST_FILENAME, 'r') ,或者

inFile = open(WORDLIST_FILENAME, 'rb', 0) 如果你真的需要它(我怀疑)。

原文由 DeepSpace 发布,翻译遵循 CC BY-SA 3.0 许可协议

我可以通过使用 此答案 中的代码来克服此错误:

 class Unbuffered(object):
    def __init__(self, stream):
        self.stream = stream

    def write(self, data):
        self.stream.write(data)
        self.stream.flush()

    def writelines(self, datas):
        self.stream.writelines(datas)
        self.stream.flush()

    def __getattr__(self, attr):
        return getattr(self.stream, attr)

import sys
sys.stdout = Unbuffered(sys.stdout)

原文由 CharlesB 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题