Python Logger FileHandler传入动态生成文件名报OSError[Errno22]无效参数问题
报错原因及解决方法
这个报错和你传字符串字面量还是变量没有任何关系,核心问题是你生成的动态文件名包含了操作系统禁止使用的非法字符。
具体原因
datetime.datetime.now().isoformat() 方法默认输出的时间字符串格式为 YYYY-MM-DDTHH:MM:SS.ffffff,例如 2024-06-15T14:30:22.123456,字符串中包含的:是Windows等操作系统明确不允许出现在文件名/路径中的字符,因此调用FileHandler创建文件时会触发OSError: [Errno 22] Invalid argument报错。你之前使用的固定字符串ThingsSpeakRESTAPI.log不包含任何非法字符,所以可以正常生成日志文件。
解决方案
你可以选择以下任意一种方式修改文件名生成逻辑即可解决问题:
- 方案一:替换
isoformat输出中的非法字符,将冒号替换为横杠、下划线等允许使用的字符:filename = datetime.datetime.now().isoformat().replace(':', '-') + "LOG.log" - 方案二:使用
strftime方法自定义时间格式,直接生成不带非法字符的时间字符串,灵活度更高:# 可根据自己的需求调整时间格式,只要不包含:/\?"<>|等非法文件名符号即可 filename = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + "LOG.log"
内容的提问来源于stack exchange,提问作者Akash Chakraborty
相关产品推荐
相关产品推荐

