Python文件读取报错:'words'未定义问题求助
问题分析与修复
错误原因
你调用fhandle.read()读取整个文件后,文件指针会移动到文件末尾。此时再用for line in fhandle遍历文件对象,已经没有任何内容可以读取,整个for循环根本不会执行。words变量只在for循环内部定义,循环没执行的话words就不存在,最后print(words)自然会抛出"words未定义"的错误。
修复方案
方案1:重置文件指针到开头
在data = fhandle.read()之后,调用fhandle.seek(0)把文件指针重置到文件起始位置,这样后续的for循环就能正常遍历文件内容了:
fname = input('enter file name') try: fhandle = open(fname, 'r') except: print('file does not exist') exit() # store entire file in a variable called data data = fhandle.read() print(data) # 重置文件指针到开头 fhandle.seek(0) # iterate through each line in a file handle for line in fhandle: line = line.strip() words = line.split() print(words)
方案2:通过已读取的data处理行
既然已经把整个文件内容读到了data里,可以直接对data按行拆分,不用再操作文件对象:
fname = input('enter file name') try: fhandle = open(fname, 'r') except: print('file does not exist') exit() # store entire file in a variable called data data = fhandle.read() print(data) # 通过data拆分处理每一行 for line in data.splitlines(): line = line.strip() words = line.split() print(words)
额外提醒
如果目标文件是空的,即使修复后,for循环依然不会执行,words还是会未定义。可以提前初始化words为一个空列表避免这种情况:
words = [] # 后续循环代码...
内容的提问来源于stack exchange,提问作者Miya Tseng-West
相关产品推荐
相关产品推荐

