OSError [Errno 22] Invalid argument(已解决)

作者在运行他人项目时,起初以为是权限问题导致无法创建日志文件,后发现是与Windows命名规则冲突。文中介绍了Windows命名约定,包括不能使用的保留字符、保留名称等,将项目中违规字符替换后程序正常运行。

最近跑别人的项目遇到一个这样的问题

OSError: [Errno 22] Invalid argument xxxxxxxxxxxxxxxxxx

屏幕截图 2023-07-12 203923

一开始以为是没有用管理员的权限运行,导致创建不了日志文件

后来发现是和windows的命名规则冲突了(以下来源官网地址

命名约定

以下基本规则使应用程序能够创建和处理文件和目录的有效名称,而不考虑文件系统:

  • 使用句点将基文件名与目录或文件名称中的扩展名分隔开。

  • 使用反斜杠 () 分隔路径组件。 反斜杠将文件名从路径中除以,将一个目录名与路径中的另一个目录名称分开。 不能在实际文件或目录的名称中使用反斜杠,因为它是将名称分隔成组件的保留字符。

  • 根据需要使用反斜杠作为 卷名称的一部分,例如“C:\”在“C:\path\file”或“\server\share\path\file”中为通用命名约定的“\server\share” (UNC) 名称。 有关 UNC 名称的详细信息,请参阅

### PyTorch 中 `OSError: [Errno 22] Invalid argument` 的解决方案 当在 PyTorch 中遇到 `OSError: [Errno 22] Invalid argument` 错误时,通常是因为文件路径存在问题。此错误可能由多种原因引起,包括但不限于: - 文件路径中的反斜杠未正确转义 - 使用了不支持的字符或非法字符作为路径的一部分 - 路径字符串中存在多余的空白或其他不可见字符 为了有效解决问题,可以采取以下措施来修正路径问题。 #### 方法一:使用原始字符串表示路径 通过在字符串前加上字母 `r` 来定义原始字符串,这样 Python 不会处理其中的任何特殊字符,从而避免因转义序列引起的错误。 ```python path = r'E:\data\my_model.pth' model.load_state_dict(torch.load(path)) ``` 这种方法适用于大多数情况下 Windows 系统上的路径设置[^4]。 #### 方法二:替换单个反斜杠为双反斜杠 如果不想使用原始字符串,则可以在路径中手动将所有的 `\` 替换为 `\\` ,以此方式确保每个反斜杠都被视为普通字符而不是转义符。 ```python path = "E:\\data\\my_model.pth" model.load_state_dict(torch.load(path)) ``` 这种方式同样能防止由于转义字符造成的解析失败[^3]。 #### 方法三:采用正斜杠代替反斜杠 对于跨平台兼容性的考虑,建议尽可能统一使用 `/` 作为分隔符,即使是在 Windows 平台上也是如此。Python 和许多库都接受这种形式,并且它更易于阅读和维护。 ```python import os path = 'E:/data/my_model.pth' if not os.path.exists(path): raise FileNotFoundError(f"The specified path does not exist: {path}") else: model.load_state_dict(torch.load(path)) ``` 上述代码片段不仅解决了潜在的路径格式问题,还增加了对目标位置是否存在验证逻辑,进一步提高了程序健壮性[^1]。 #### 方法四:利用 `os.path.join()` 构建安全可靠的路径 借助于标准库模块 `os.path` 提供的功能构建绝对路径,能够自动适配不同操作系统之间的差异,减少人为输入失误的风险。 ```python import os base_dir = 'E:' relative_path = os.path.join(base_dir, 'data', 'my_model.pth') model.load_state_dict(torch.load(relative_path)) ``` 该做法特别适合动态生成多个子目录结构下的资源访问需求[^2]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Otto_1027

蟹蟹你,我会继续努力的~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值