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

时间:2017-07-23 08:29:49

标签: python

这是麻省理工学院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

2 个答案:

答案 0 :(得分:9)

来自open的文档字符串:

  

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

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

inFile = open(WORDLIST_FILENAME, 'r')

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

答案 1 :(得分:1)

我可以使用this answer中的代码来克服此错误:

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)