You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.6.3异常处理失效:FileNotFoundError未被捕获求助

问题根源与修复方案

嘿,这问题一眼就能看出来啦——你把open()函数放在try代码块外面了!当你输入不存在的文件名时,open()抛出的FileNotFoundError根本没被后面的except捕获到,直接就触发了报错。

为什么原来的代码不管用?

你当前的代码执行顺序是:

  1. 先执行f = open(txtFile, "r"),这一步如果文件不存在,立刻抛出异常
  2. 异常已经发生了,程序直接崩溃,try块根本没机会执行

所以不管你用FileNotFoundError、OSError还是裸except:,都没用——因为异常发生在try的管辖范围之外呀!

修正后的代码方案

方案1:把open()放进try块里

txt = ""
txtFile = input("gimme a file.")
try:
    f = open(txtFile, "r")
    for line in f:
        cleanedLine = line.strip()
        txt += cleanedLine
except FileNotFoundError:
    print("!")
finally:
    # 手动关闭文件,避免资源泄漏
    if 'f' in locals():
        f.close()

方案2:用with语句(推荐,更简洁安全)

with语句会自动帮你管理文件资源,不用手动调用close(),是Python处理文件的最佳实践:

txt = ""
txtFile = input("gimme a file.")
try:
    with open(txtFile, "r") as f:
        for line in f:
            cleanedLine = line.strip()
            txt += cleanedLine
except FileNotFoundError:
    print("!")

补充说明

  • 裸except:确实不规范,它会捕获所有异常(包括用户按Ctrl+C触发的KeyboardInterrupt这类你可能不想处理的异常),所以建议明确指定要捕获的异常类型,比如FileNotFoundError或者它的父类OSError。
  • 用with语句不仅能自动关闭文件,还能在发生异常时正确释放资源,比手动调用close()更可靠。

内容的提问来源于stack exchange,提问作者AyO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:07:55