为什么Python删除文件函数捕获FileNotFoundError后无法跳出while循环
无法跳出while循环的根本原因
- 异常分支中
result赋值为False后,全程没有修改该变量的逻辑,while result == False的判断条件永久成立,自然无法跳出循环 - 调用
input()获取到的用户输入的新文件名没有赋值给任何变量,输入内容直接被丢弃,就算循环能终止,后续执行os.remove(file_to_delete)还是会删除最初传入的不存在的文件,仍然会报错 - 循环内的
if result == True: break判断完全无效,该分支下没有任何能把result改为True的逻辑,这个判断永远不会触发
修正后的代码
import os def delete_file(file_to_delete): try: # 优先尝试删除初始传入的目标文件 os.remove(file_to_delete) print('file removed: ', file_to_delete) return True except FileNotFoundError: print("Error. File not found.") # 循环获取新文件名直到删除成功 while True: new_file_path = input("Please enter a valid filename: ") try: os.remove(new_file_path) print('file removed: ', new_file_path) return True except FileNotFoundError: print("Error. File not found, please try again.")
修正说明
- 保留了原代码先尝试删除初始传入文件名的执行逻辑,兼容原有调用习惯
- 进入异常循环后,每次拿到用户输入的新路径都会直接尝试删除,删除成功就直接返回True终止函数,不会出现死循环问题
- 去掉了原代码中循环结束后重复执行删除操作的冗余逻辑,避免二次报错
内容的提问来源于stack exchange,提问作者JakTheHero
相关产品推荐
相关产品推荐

