如何在python 3中解决这个"ValueError:不能有无缓冲的文本I/O"?

Ric*_*ard 11 python python-3.x

这是麻省理工学院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
Run Code Online (Sandbox Code Playgroud)

Dee*_*ace 14

来自open的文档字符串:

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

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

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

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


Cha*_*esB 5

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

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)
Run Code Online (Sandbox Code Playgroud)