1

我正在麻省理工学院的开放课件上学习 CS/Python。他们希望我设计一个刽子手游戏,并给了我一些用于导入单词表并从那里生成随机单词的初步代码。此代码本身会返回错误:“不能有无缓冲的文本 I/O。” 这是代码:

import random
import string

WORDLIST_FILENAME = "words.txt"

def load_words():
     print("Loading word list from file...")
     # inFile: file
     inFile = open(WORDLIST_FILENAME, 'r', 0)
     # line: string
     line = inFile.readline()
     # wordlist: list of strings
     wordlist = string.split(line)
     print("  ", len(wordlist), "words loaded.")
     return wordlist

def choose_word(wordlist):
     return random.choice(wordlist)

MIT 课程没有使用我正在使用的 Python 3.0,所以那里可能有问题;如您所见,我已经将“print”从声明更新为与 Python 3.0 兼容的函数。

4

2 回答 2

6

抛出此错误是因为您尝试在关闭缓冲的情况下读取文本文件(第三个参数设置为 0):

inFile = open(WORDLIST_FILENAME, 'r', 0)

将上面的行替换为

inFile = open(WORDLIST_FILENAME, 'r')

它应该可以工作。

来自 python 文档:

buffering 是一个可选整数,用于设置缓冲策略。 传递 0 关闭缓冲(仅在二进制模式下允许),1 选择行缓冲(仅在文本模式下可用),整数 > 1 表示固定大小的块缓冲区的大小。

于 2012-09-13T18:56:22.507 回答
3

0open内置函数调用中删除。来自 python 文档:

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

于 2012-09-13T18:56:45.197 回答