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

为什么Python的try/except机制无法捕获OSError,文件校验后读入仍报错

问题原因
  • os.path.exists() 本身不会抛出OSError异常:无论传入的路径是否存在、是否有权限访问,该函数只会返回True或False两个布尔值,不会主动触发异常,因此你写的except OSError分支永远不会被执行。
  • 未对os.path.exists()的返回值做判断:你仅调用了校验函数,但没有根据返回的布尔值处理不同逻辑,不管文件是否存在,都会直接打印文件可用的提示,等于当前check方法没有实际校验作用。
  • 额外的路径拼接隐患:手动拼接路径使用+ '/' +的写法在不同操作系统下可能出现斜杠不匹配问题,推荐直接使用os.path.join()方法自动适配系统路径规则。
修复方案

方案1:修改check方法增加返回值判断

def check(self):
    # 自动适配系统的路径拼接
    full_path = os.path.join(self.pathname, self.file)
    if os.path.exists(full_path):
        print(f"'{full_path}': 该文件可正常使用")
        return True
    else:
        print(f"操作系统错误:请检查文件 {self.file} 是否存在、文件名或存储路径是否正确")
        return False

调用时先判断check的返回结果再执行导入:

if __name__ == "__main__":
    table= ImportFiles("C:/Users/..s", "....csv")
    if table.check():
        df = table.import_csv()

方案2:直接在导入逻辑中做异常捕获(更推荐)

提前做文件存在性校验可能存在竞态问题:比如校验通过后、读取文件前,文件被其他进程删除/移动,还是会报错。更稳妥的做法是跳过单独的check步骤,直接在导入CSV的逻辑中捕获异常:

def import_csv(self):
    full_path = os.path.join(self.pathname, self.file)
    try:
        return pd.read_csv(full_path)
    except FileNotFoundError:
        print(f"读取失败:文件 {full_path} 不存在,请检查路径和文件名")
        return None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:21:03