日志模块报错:raise NoSectionError(section) from None configparser.NoSectionError: No section: ‘log‘

日志模块报错:raise NoSectionError(section) from None configparser.NoSectionError: No section: ‘log’

原因:没有读取到loguru.ini配置文件

cfg.read(f'{config_path}\loguru.ini')  # 读取配置文件  路径全部都用正斜杠,Linux中反斜杠会读取不到

报错如下:
日志模块报错:raise NoSectionError(section) from None configparser.NoSectionError: No section: ‘log‘_第1张图片

loguru.ini

[log]
format = {time:YYYY-MM-DD HH:mm:ss},{module}(line:{line}),{level}||{message}
level = ERROR
rotation = 10 MB
compression = zip
retention = 2 days

handle_loguru.py

# handle_loguru
from configparser import ConfigParser  # 读取ini配置的模块
from loguru import logger  # 日志模块
from handle_path import config_path  # 读取项目自定义路径
from time import strftime, sleep  # 时间模块


class MyLog:
    __instance = None  # 单例实现
    __call_flag = True  # 控制init调用,如果调用过就不再调用

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super().__new__(cls)
        return cls.__instance

    def get_log(self):
        if self.__call_flag:  # 看是否调用过
            __curdate = strftime('%Y%m%d-%H%M%S')
            cfg = ConfigParser()
            cfg.read(f'{config_path}/loguru.ini')  # 读取配置文件  路径全部都用正斜杠,Linux中反斜杠会读取不到
            logger.remove(handler_id=None)  # 关闭console输出
            logger.add(f'log_{__curdate}.log',  # 日志存放位置
                       retention=cfg.get('log', 'retention'),  # 清理
                       rotation=cfg.get('log', 'rotation'),  # 循环 达到指定大小后建立新的日志
                       format=cfg.get('log', 'format'),  # 日志输出格式
                       compression=cfg.get('log', 'compression'),  # 日志压缩格式
                       level=cfg.get('log', 'level'),  # 日志级别
                       encoding='utf-8')
            self.__call_flag = False  # 如果调用过就置为False
        return logger


if __name__ == '__main__':
    log1 = MyLog().get_log()  # 第一个实例
    log1.error('李四')
    sleep(5)
    log2 = MyLog().get_log()  # 第二个实例,因为做了单例模式,所以其实是同一个实例
    log2.error('张三')

handle_path.py

# handle_path
import os
# 1-工程路径
# os.path.abspath(__file__)   当前文件路径
# os.path.dirname()  #返回文件所在的目录
# project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
project_path = os.path.dirname(__file__)
# project_path2 = os.path.dirname(os.path.abspath(__file__))

#2- 截图路径
# os.path.join(参数1,参数2)  拼接参数1和参数2的路径
screenshot_path = os.path.join(project_path, r'outFiles\screenshot')

#3- 日志路径
logs_path = os.path.join(project_path, r'outFiles\logs')

#4- 测试数据路径
testData_path = os.path.join(project_path, 'ui_data')

#5- 测试报告路径
reports_path = os.path.join(project_path, r'outFiles\reports\tmp')

#6- 配置路径
config_path = os.path.join(project_path, 'configs')
if __name__ == '__main__':
    print(project_path)
    print(config_path)

无论Windows还是Mac路径间隔全部用/正斜杠

正斜杠 /:像一个人向前面倾倒(无论从任何角度看都是向前面倾倒)
==反斜杠 ==:像一个人向后面倾倒(无论从任何角度看都是向后面倾倒)
我们平时在写代码的时候,路径最好都用正斜杠/,因为正斜杠支持Linux系统和Windows系统下的路径表示。有时候代码互传,Windows中支持反斜杠\路径,但是Linux中不支持反斜杠\路径,就会报错,而且还不易察觉。所以为了避免不必要的犯错,直接所有路径都使用正斜杠/。这样无论Windows还是Linux运行代码都不会因为这个路径杠的问题报错。
\反斜杠:仅支持Windows系统下的路径间隔,在Linux系统下不识别\作为的路径间隔。在Linux系统下该符号作为命令行的强制换行符。

你可能感兴趣的:(python)