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

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

OSError: [Errno 22] Invalid argument xxxxxxxxxxxxxxxxxx

屏幕截图 2023-07-12 203923

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

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

命名约定

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

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

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

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

  • 不要假定区分大小写。 例如,将 OSCAR、Oscar 和 oscar 的名称视为相同,即使某些文件系统 ((如符合 POSIX 的文件系统) 可能认为它们不同)。 请注意,NTFS 支持 POSIX 语义区分大小写,但这不是默认行为。 有关详细信息,请参阅 CreateFile

  • (驱动器号) 的卷指定符同样不区分大小写。 例如,“D:\”和“d:\”引用同一卷。

  • 使用当前代码页中的任何字符作为名称,包括 Unicode 字符和扩展字符集中 (128-255) 字符,但以下各项除外:

    • 以下保留字符:
      • <(小于)
      • >(大于)
      • :(冒号)
      • "(双引号)
      • /(正斜杠)
      • \(反斜杠)
      • | (竖线或竖线)
      • ? (问号)
      • *(星号)
    • 整数值零,有时称为 ASCII NUL 字符。
    • 整数表示形式的字符介于 1 到 31 之间,但允许这些字符的备用数据流除外。 有关文件流的详细信息,请参阅 文件流
    • 目标文件系统不允许的任何其他字符。
  • 使用句点作为路径中的目录 组件 来表示当前目录,例如“.\temp.txt”。 有关详细信息,请参阅 路径

  • 使用两个连续的句点 (。) 作为路径中的目录 组件 来表示当前目录的父目录,例如“.”。\temp.txt”。 有关详细信息,请参阅 路径

  • 不要将以下保留名称用于文件的名称:

    CON、PRN、AUX、NUL、COM0、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT0、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8 和 LPT9。 另请避免这些名称紧跟扩展名;例如,NUL.txt 和 NUL.tar.gz 都等效于 NUL。 有关详细信息,请参阅命名空间

  • 不要用空格或句点结束文件或目录名称。 尽管基础文件系统可能支持此类名称,但 Windows shell 和用户界面不支持。 但是,可以接受指定句点作为名称的第一个字符。 例如“.temp”。

划重点:下列符号是不能用的

  • <(小于)
  • >(大于)
  • :(冒号)
  • "(双引号)
  • /(正斜杠)
  • \(反斜杠)
  • | (竖线或竖线)
  • ? (问号)
  • *(星号)

然后发现项目中确实存在错误

屏幕截图 2023-07-12 222221

很显然,:是不能存在的

把他换成-后,程序就跑起来了

屏幕截图 2023-07-12 222822

类似的问题可以参考一下下

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: OSError: [Errno 22] Invalid argument bytes 错误通常表示在调用Python中的文件或目录操作时传递给函数的参数有问题。这个错误可能由多种原因导致,下面是一些可能的场景和解决方案。 1. 参数类型不匹配:某些函数要求参数为字符串类型,而您可能传递了字节类型。您可以尝试将参数转换为字符串类型,或者查看文档以确定正确的参数类型。 2. 字符编码问题:如果您使用的文件或目录名包含非ASCII字符,而函数无法正确处理这些字符,则可能会引发此错误。尝试使用正确的字符编码打开文件或读取目录,并确保您的操作系统和Python环境都支持相应的字符编码。 3. 文件或目录不存在:如果您尝试打开不存在的文件或读取不存在的目录,操作系统将引发此错误。确保您传递给函数的文件或目录路径是正确的,并且文件或目录确实存在于系统中。 4. 权限问题:某些操作可能需要特定的权限才能执行。确保您的用户帐户具有执行特定操作所需的权限,并检查您是否具有足够的权限。 5. 文件或目录名中包含非法字符:某些操作系统不允许在文件或目录名中使用特定字符(如空格、斜杠等)。检查您的文件或目录名是否包含这些非法字符,并尝试使用有效的文件或目录名。 6. 文件或目录路径过长:某些操作系统限制文件或目录路径的长度。如果您的路径过长,操作系统可能会拒绝执行操作。缩短路径或重命名文件或目录可以解决此问题。 如果以上解决方案都无法解决您的问题,建议您查看详细的错误消息和堆栈跟踪,以便更好地了解问题的具体细节,并在互联网上搜索类似的问题和解决方案。 ### 回答2: oserror: [errno 22] invalid argument bytes 是一个操作系统错误,指示在执行某个操作时传递给函数的参数是无效的。 这个错误通常发生在使用字节参数的函数调用中。字节参数通常是指用于处理字符编码和解码、文件读写等操作的字节数组。当传递给函数的字节参数无效时,操作系统无法正确处理相关的操作,从而导致错误的出现。 造成这个错误的原因可能有多种,例如传递的参数类型不正确、参数大小超出了函数可接受的范围或者参数值不符合操作的要求等。 解决这个错误的方法通常是检查传递给函数的参数,确保其类型正确,大小合适,值有效。可以参考相关函数的文档或者引用文档,了解参数的要求和限制。同时,也可以尝试使用其他参数来替代原来的参数,看是否能够解决问题。 如果在使用第三方库或者框架时遇到了这个错误,可以尝试更新到最新版本,或者向相应的技术支持寻求帮助。 总之,通过仔细检查传递给函数的参数,并确保其有效,通常可以解决 oserror: [errno 22] invalid argument bytes 这个错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Otto_1027

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

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

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

打赏作者

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

抵扣说明:

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

余额充值