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