最近跑别人的项目遇到一个这样的问题
OSError: [Errno 22] Invalid argument xxxxxxxxxxxxxxxxxx
一开始以为是没有用管理员的权限运行,导致创建不了日志文件
后来发现是和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”。
划重点:下列符号是不能用的
- <(小于)
- >(大于)
- :(冒号)
- "(双引号)
- /(正斜杠)
- \(反斜杠)
- | (竖线或竖线)
- ? (问号)
- *(星号)
然后发现项目中确实存在错误
很显然,:
是不能存在的
把他换成-
后,程序就跑起来了
类似的问题可以参考一下下