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

Python使用try-except执行os.chdir切换路径仍报FileNotFoundError问题

原代码问题说明

你贴出的try-except逻辑本身可以捕获FileNotFoundError,如果运行时仍然抛出第一个路径的不存在错误,优先排查三类问题:

  • 代码缩进错误:第二个os.chdir没有正确归属到except块下,导致异常抛出后没有进入兜底逻辑
  • 路径字符串书写错误:从你贴的报错来看,路径末尾多了一个多余的右括号,说明实际运行的代码里第一个路径字符串可能混入了多余字符,路径本身不符合预期
  • 裸except写法本身是非常糟糕的实践:它会无差别捕获所有异常(包括键盘中断、内存错误等非业务异常),且如果第二个路径也不存在,你无法快速定位是哪一个路径出了问题,只会拿到第二个路径的报错,排查成本很高。

另外硬编码C://Users//xxx的写法本身兼容性极差:如果系统盘不是C盘、Windows用户目录做了迁移、或者用户名和你写的不一致,都会直接失效。

更优的跨设备路径适配方案

1. 优先用系统API获取标准目录,不要硬编码盘符和用户目录

Python自带的pathlib(Python3.4+内置)可以直接跨系统获取当前用户的主目录,不需要手动写C://Users前缀,同时会自动适配不同操作系统的路径分隔符,避免斜杠/反斜杠的兼容问题。
不要靠异常捕获做路径切换,优先主动判断路径是否存在:

from pathlib import Path
import os

# 自动获取当前系统的用户主目录,Windows下自动匹配当前登录用户的C:/Users/xxx路径
home = Path.home()
# 把所有可能的路径按优先级列在这里,后续新增设备直接加路径即可
candidate_paths = [
    home / "Cloud" / "Data",
    Path("D:/Cloud/Data"),  # 适配系统盘在D盘的情况
    Path("/Users/xxx/Cloud/Data")  # 如果后续要适配macOS也可以直接加
]

# 遍历找到第一个存在的可用目录
target_dir = None
for path in candidate_paths:
    if path.is_dir():  # 确认路径存在且是文件夹
        target_dir = path
        break

if not target_dir:
    raise FileNotFoundError("所有候选路径都不存在,请检查云存储目录位置")

# 切换工作目录
os.chdir(target_dir)

2. 尽量不要全局切换工作目录

全局调用os.chdir会改变整个脚本的运行上下文,如果后续代码里有其他相对路径的读写逻辑,很容易因为工作目录变化出现找不到文件的问题。更稳妥的做法是把拿到的target_dir作为根路径变量,所有文件操作都基于这个绝对路径拼接,比如要读Data目录下的result.csv,直接写:

# 不需要chdir,直接拼绝对路径读写
with open(target_dir / "result.csv", "r", encoding="utf-8") as f:
    data = f.read()

3. 多设备长期维护建议

如果脚本要在更多设备上运行,不要把路径硬编码在代码里,可以在脚本同目录放一个简单的配置文件(比如config.ini),每台设备上只需要修改配置文件里的路径为本地实际路径,脚本统一读取配置即可,不需要在代码里维护所有设备的路径列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:51:59