Python中如何捕获FileNotFoundError并提示用户输入错误文件名?
问题分析与解决
嘿,我知道问题出在哪了!你的代码逻辑有个小漏洞——input()函数本身不管用户输入什么内容,都不会抛出OSError异常,只有当你尝试打开这个文件的时候,才会触发找不到文件的错误。
原代码的问题
你的原代码里,try块只包裹了input()语句,但input()只会返回用户输入的字符串(哪怕是不存在的文件名),不会触发任何异常。真正会抛出FileNotFoundError(属于OSError的子类)的操作是用这个文件名打开文件,而这部分代码你没放到try块里,所以异常根本没被捕获到。
修正后的代码
把文件打开操作放进try块里,就能正确捕获异常并给用户提示了:
try: filename = input("Your file name: ") # 核心:将文件打开操作纳入try块范围 with open(filename, 'r') as file: # 这里可以添加文件读取/处理的逻辑 print("文件已成功打开!") except FileNotFoundError as e: # 精准捕获“文件不存在”的错误 print(f'我们遇到了错误:你输入的文件名不存在 - {str(e)}') except OSError as e: # 兜底捕获其他文件操作相关的OSError(比如权限不足等) print(f'我们遇到了文件操作错误:{str(e)}')
额外说明
- 如果只需要处理“文件名错误/文件不存在”的情况,直接捕获
FileNotFoundError就足够了,这样不会误捕获其他类型的OSError(比如文件权限问题)。 - 使用
with open(...)语法可以自动管理文件句柄,避免忘记关闭文件的问题。
内容的提问来源于stack exchange,提问作者Darentina
相关产品推荐
相关产品推荐

