非常游戏网
Python如何处理路径过长导致的系统报错_使用相对路径或UNC路径

Python如何处理路径过长导致的系统报错_使用相对路径或UNC路径

2026-05-26日常编程263641

Windows下OSError[WinError 206]根源是系统级MAX_PATH=260字符限制,需先启用注册表LongPathsEnabled并重启,再在Python中显式使用"?"前缀或os.chdir()缩短路径访问。

Windows下OSError: [WinError 206]的根源是什么

这个错误本质是Windows API对传统路径长度(MAX_PATH=260字符)的硬限制,不是Python本身的问题。当你用os.path.join()open()操作深度嵌套目录、带长文件名的路径时,哪怕Python字符串本身合法,底层CreateFileW等系统调用仍会直接拒绝。

启用长路径支持前必须改注册表或组策略

仅靠Python代码无法绕过该限制——Windows默认禁用长路径支持。必须先让系统允许:

  • 修改注册表项 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlFileSystemLongPathsEnabled,设为DWORD=1
  • 或通过组策略:「计算机配置 → 管理模板 → 系统 → 文件系统 → 启用 Win32 长路径」设为已启用
  • 改完需重启生效;不重启的话,新终端进程可能仍读不到变更

Python里真正起效的两种路径写法

注册表改完后,还需在代码中显式使用支持长路径的格式,否则旧路径写法依然触发错误:

Python 3.14.3

微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。

  • 用UNC前缀:r"\?C:erylongpath oile.txt" —— 注意\?开头、原始字符串、盘符后跟
  • 用相对路径配合os.chdir()切换工作目录到靠近目标的位置,再用短路径访问 —— 适合批量处理同父目录下的文件
  • 别用os.path.abspath()自动补全路径后再传给open(),它生成的仍是普通格式,不带\?

示例:

import os
# 错误:即使路径合法,仍可能触发WinError 206
open(r"C:erydeep
estedolder..." + "x" * 200 + ".txt")

正确:显式加?

with open(r"?C:erydeep estedolder..." + "x" * 200 + ".txt") as f: pass

跨平台脚本里别硬编码\?

\?是Windows专属机制,Linux/macOS不识别。如果脚本要多平台运行:

  • sys.platform == "win32"做条件判断,只在Windows下加前缀
  • 避免用pathlib.Path.resolve()直接拼长路径,它不自动转UNC;应手动检查长度是否超240(预留空间),再决定是否加前缀
  • 第三方库如pathlib2pywin32不能替代注册表设置,它们只是封装,底层仍走同一套API

最易被忽略的是:注册表改了但没重启,或者用了\?却忘了用原始字符串(r""),导致反斜杠被转义成换行符之类——这时候报的错可能完全不相关,排查起来反而更费时间。