window下正常的python到Linux下报configparser.NoSectionError: No section

读取配置文件configparser.NoSectionError: No section

  • 问题:configparser.NoSectionError: No section
    • 代码
    • 排查问题:文件编码
    • 解决方案

问题:configparser.NoSectionError: No section

情况描述:基于Flask的python项目读取配置文件模块,在window下正常运行,但部署到linux服务器上就报异常configparser.NoSectionError: No section

代码

import configparser,os

config = configparser.ConfigParser()

def register_init_config():

    # -read读取ini文件
    pro_path = os.path.split(os.path.realpath(__file__))[0]
    
    config.read(pro_path + '\\config.ini', encoding='utf-8')
    
    config.read(pro_path + '\\error_code.ini', encoding='utf-8')

    # 数据库配置
    setting.db_const = {
        'db_name': config['db']['db_name'],
        'db_user': config['db']['db_user'],
        'db_pass': config['db']['db_pass'],
        'db_host': config['db']['db_host'],
        'db_port': config['db']['db_port']
    }

排查问题:文件编码

第一反应是考虑适应因为不同系统的编码格式不一致所致,网上搜的答案大部分都是配置文件被window添加额外字符,或者改成txt格式,text格式等
为了验证编码问题,直接在linux环境下,vi一个新的配置文件,复制粘贴纯字符,结果还是报错误

configparser.NoSectionError: No section:'db'

解决方案

google一轮之后发现,问题根源是window和linux的文件系统,斜杠是相反的,把斜杠反过来就正常运行了

import configparser,os

config = configparser.ConfigParser()

def register_init_config():

    # -read读取ini文件
    pro_path = os.path.split(os.path.realpath(__file__))[0]
    
    config.read(pro_path + '/config.ini', encoding='utf-8')
    
    config.read(pro_path + '/error_code.ini', encoding='utf-8')

    # 数据库配置
    setting.db_const = {
        'db_name': config['db']['db_name'],
        'db_user': config['db']['db_user'],
        'db_pass': config['db']['db_pass'],
        'db_host': config['db']['db_host'],
        'db_port': config['db']['db_port']
    }

在此感谢该博文的启发
博文地址:https://blog.csdn.net/qq_31489933/article/details/88327055

你可能感兴趣的:(python)