使用Python logging模块写日志到指定目录时报OSERROR如何解决
错误原因分析
- 代码中调用了
os.path.join()方法,但未导入os模块,这是最直接的触发报错的原因 - 未提前判断目标存储目录是否存在,如果
c:\\users\\documents\\路径实际不存在,也会触发参数无效报错 - Windows系统下路径如果直接写反斜杠容易出现转义问题,更推荐使用原始字符串或正斜杠格式定义路径
正确实现步骤
- 导入所有依赖模块:需要同时导入
os、logging、time三个模块 - 优先使用原始字符串定义存储路径,避免转义异常
- 提前校验目标目录是否存在,不存在则自动创建
- 拼接日志文件名后初始化FileHandler
可运行的示例代码
import logging import time import os # 用原始字符串定义路径,避免转义问题,无需额外加末尾分隔符 log_dir = r'c:\users\documents' # 校验目录是否存在,不存在则递归创建 if not os.path.exists(log_dir): os.makedirs(log_dir) # 拼接日志文件完整路径 log_file_path = os.path.join(log_dir, time.strftime('log_%Y-%m-%d.log')) # 初始化文件处理器,可指定encoding避免中文乱码 hndlr = logging.FileHandler(log_file_path, encoding='utf-8') # 后续可按需添加日志格式配置 formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') hndlr.setFormatter(formatter) logger = logging.getLogger() logger.addHandler(hndlr) logger.setLevel(logging.INFO)
如果你确认目标目录一定存在,也可以省略目录创建的步骤,但必须保证导入了
os模块,否则os.path.join无法正常调用,必然会触发报错。
内容的提问来源于stack exchange,提问作者Padfoot123
相关产品推荐
相关产品推荐

