Python中setup函数无输出无报错且elif部分导致代码终止怎么解决?
问题根因
- 核心死循环问题:文件对象的
read()方法读取完内容后,文件指针会移动到文件末尾,后续再次调用read()只会返回空字符串。当文件中存在abstain字符串时,第一个if search not in f1.read()已经读取了全部文件内容,判断结果为False;后续elif search in f1.read()读取的是空字符串,判断结果也为False,两个分支都无法进入,setup变量始终为False,导致while循环无限运行,表现为程序卡住无输出无报错。 - 冗余判断逻辑:已经做了
search not in 内容的判断,剩余场景直接用else即可,不需要重复读取文件做二次判断。 - 文件资源管理不规范:直接调用
open()打开文件没有主动关闭,存在资源泄漏风险,建议统一使用with上下文管理器操作文件,自动完成资源释放。 - 类方法定义不规范:类内定义的无实例参数方法需要添加
@staticmethod装饰器,否则直接调用会触发参数错误。 - 命名冲突隐患:局部变量名和函数名均为
setup,容易引发混淆,建议修改循环变量名。
修复后可运行代码
class votingSystem(): @staticmethod def setup(): setup_finished = False while not setup_finished: search = 'abstain' # 提前读取一次文件内容,避免重复读取 with open('lib.py', 'r', encoding='utf-8') as f1: content = f1.read() if search not in content: setup_finished = True with open('lib.py', 'w', encoding='utf-8') as file: file.write('abstain = 0' + '\n' * 5) else: setup_finished = True with open('lib.py', 'w', encoding='utf-8') as file: # 与原逻辑一致,写入20个换行 file.write('\n\n\n\n' * 5) # 调用类静态方法 votingSystem.setup()
内容的提问来源于stack exchange,提问作者wbleakley
相关产品推荐
相关产品推荐

