windows路径中u被误解析为unicode转义符导致路径错误,应使用原始字符串或pathlib.path构造;工作目录漂移需以__file__为锚点;空格路径须加引号;windows路径长度超260字符需启用longpathsenabled。

Windows路径里的u被当成Unicode转义前缀
比如写 "C:用户文档ile.txt",Python会把 u 当作 Unicode 转义起始符(类似 u4f60),而后面接的“用户”不是合法十六进制编码,直接触发 UnicodeDecodeError 或静默截断路径——结果 os.path.exists() 返回 False,但文件其实存在。
常见表现:报错信息里没提 Unicode,却卡在路径判断环节;用 repr() 打印路径字符串能看到 'C:\u\u6587\u6863\file.txt' 这类乱码。
- 别硬拼字符串,尤其避免手动写
开头的中文路径 - 优先用原始字符串:
r"C:用户文档ile.txt" - 更推荐用
pathlib.Path构造:Path(r"C:用户文档") / "file.txt",它自动处理编码和转义
FileNotFoundError 真因常不是文件缺失,而是工作目录漂移
同一行代码 open("data/config.json"),在 PyCharm 里右键运行时工作目录是项目根目录,终端里执行 python src/main.py 时工作目录却是 src/。路径基准变了,相对路径就失效了。
关键点:__file__ 是唯一稳定锚点,os.getcwd() 随执行环境变。
- 永远用
Path(__file__).parent / "data" / "config.json"替代硬写相对路径 - 避免依赖
os.chdir()临时切目录——容易漏恢复,且多线程下不安全 - 调试时第一件事:打印
os.getcwd()和Path(__file__).parent.resolve()对比
文件名含空格或引号时,Shell 解析失败才是根源
错误命令:python my script.py —— Shell 把它拆成三个参数:python、my、script.py,自然找不到 my 这个可执行文件。
这不是 Python 的错,是命令行解释器(bash/zsh/cmd)把空格当分隔符了。
- 终端里执行时,必须用引号包裹:
python "my script.py"或python 'my script.py' - Linux/macOS 下可用反斜杠转义:
python my script.py - 脚本内部若用
subprocess.run()调外部命令,传参要用列表形式:["python", "my script.py"],避免 Shell 解析
路径长度超 260 字符触发 OSError: [WinError 206]
Windows 默认限制路径总长 ≤260 字符(含盘符、分隔符、null),超长时系统 API 直接拒绝,抛出 OSError: [WinError 206] The filename or extension is too long,而不是 FileNotFoundError。
这种错误只在 Windows 出现,且 pathlib.Path.resolve() 也无法绕过——它是系统级硬限制。
- 启用注册表项
LongPathsEnabled=1是最彻底的解法(需管理员权限 + 重启 Python 进程) - 代码层降级策略:用
pathlib.Path拼接路径(比字符串拼接更安全),或先os.chdir()到靠近目标的父目录再操作 - 别手动加
\?前缀——易因编码/转义出错,且部分库(如zipfile)不兼容
Path(__file__).parent 锚定起点,全程用 / 拼接,避开所有字符串拼接和手动转义。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











