为什么Python代码中for keywordLine in keywordsFile循环无法正常运行?
问题原因分析
- 文件关闭语句位置错误:你代码中的
keywordsFile.close()缩进层级错误,被包含在for循环的else分支内部。仅当某行关键词的分值不属于1、3、4、5、7、8时才会执行文件关闭操作,执行后后续循环迭代无法读取已关闭的文件,直接终止运行;如果所有关键词分值都命中前面的判断条件,文件关闭语句永远不会执行,文件持续处于打开状态也可能引发IO阻塞导致程序卡住。 - 异常捕获范围不全:你仅捕获了IOError类型异常,如果关键词文件存在格式不符合要求的行(比如某行没有逗号分隔、分隔后元素不足2个),执行
splitKeywordLine[1]时会抛出IndexError等未被捕获的异常,直接导致程序终止且无报错提示,看起来就像停在for循环执行位置。 - 空文件问题:如果传入的关键词文件内容为空,for循环不会触发任何迭代,也会表现为程序卡在for循环位置无后续反应。
修复方案
优先使用with语句自动管理文件生命周期,不需要手动调用close,同时新增行格式校验和更全的异常捕获,参考修复后代码:
def compute_tweets(tweets, keywords): global unhappy, okay, satisfied, excited, good, happy, alright timeZones = () unhappy = [] okay = [] alright = [] satisfied = [] excited = [] good = [] happy = [] try: with open(keywords, 'r', encoding='utf-8') as keywordsFile: for keywordLine in keywordsFile: keywordLine = keywordLine.rstrip('\n') splitKeywordLine = keywordLine.split(',') # 新增格式校验,跳过不符合规范的行 if len(splitKeywordLine) < 2: continue score = splitKeywordLine[1].strip() keyword = splitKeywordLine[0].strip() if score == '1': unhappy.append(keyword) elif score == '3': okay.append(keyword) elif score == '4': alright.append(keyword) elif score == '5': satisfied.append(keyword) elif score == '7': excited.append(keyword) elif score == '8': good.append(keyword) else: happy.append(keyword) except IOError: print('Error: File', keywords, "does not exist") print(timeZones) except Exception as e: print(f'Error when processing keyword file: {str(e)}')
内容的提问来源于stack exchange,提问作者Tesh
相关产品推荐
相关产品推荐

