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

为何Try except无法捕获FileNotFoundError?代码问题排查

问题分析与解决

你的代码存在两个关键问题,导致捕获机制未达到预期效果:

  • except块中使用raise重新抛出错误:你在捕获FileNotFoundError后打印了提示信息,但紧接着用raise语句将捕获的错误重新抛出,这相当于取消了捕获操作,程序依然会输出错误堆栈信息,无法终止在你期望的提示步骤。
  • 函数未被调用:从给出的代码来看,你仅定义了split_columns函数,但没有执行调用逻辑。如果不运行split_columns(file_name),函数内部的try-except代码块根本不会触发,输入不存在的文件名自然不会触发捕获逻辑。

修正后的代码

如果想要捕获错误后打印提示并直接终止程序,可以这样修改:

import sys

file_name = input("Choose a file: ")
def split_columns(file_name):
    x_values = []
    y_values = []     
    try:                                            
        with open(file_name) as f:
            for line in f:
                row_values = line.split()
                print(row_values)
                x_values.append(float(row_values[0]))
                y_values.append(float(row_values[1]))
    except FileNotFoundError:
        print('This file does not exist, try again!')
        sys.exit(1)  # 终止程序,返回非0状态码表示异常退出
    return x_values, y_values

# 必须调用函数才会执行内部逻辑
split_columns(file_name)

如果只是希望不抛出错误、让程序正常结束(而非强制终止进程),可以去掉raise,改为返回标记值表示失败:

file_name = input("Choose a file: ")
def split_columns(file_name):
    x_values = []
    y_values = []     
    try:                                            
        with open(file_name) as f:
            for line in f:
                row_values = line.split()
                print(row_values)
                x_values.append(float(row_values[0]))
                y_values.append(float(row_values[1]))
    except FileNotFoundError:
        print('This file does not exist, try again!')
        return None, None  # 返回空值标记操作失败
    return x_values, y_values

# 调用函数并处理返回结果
x, y = split_columns(file_name)
if x is None:
    # 可在此添加重试或后续终止逻辑
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:25:27