• python读取配置文件报keyerror文件路径不正确导致的错误


    - 在其他模块使用反射读取配置文件报错,但是在反射模块中读取GetData.check_list又是正确的

    反射模块如下:

    # get_data.py
    
    from API_AUTO.p2p_project_7.tools import project_path
    import pandas as pd
    from API_AUTO.p2p_project_7.tools.read_config import ReadConfig
    
    
    class GetData:
        Cookie = None
        LoanId = None
        check_list = eval(ReadConfig.get_config(project_path.case_config_path, "CHECK_LEAVE_AMOUNT", "check_list"))
        AddTel = pd.read_excel(project_path.test_case_path, sheet_name="init").iloc[0, 0]
        NormalTel = pd.read_excel(project_path.test_case_path, sheet_name="init").iloc[1, 0]
        AdminTel = pd.read_excel(project_path.test_case_path, sheet_name="init").iloc[2, 0]
        LoanMemberId = pd.read_excel(project_path.test_case_path, sheet_name="init").iloc[3, 0]
        MemberID = pd.read_excel(project_path.test_case_path, sheet_name="init").iloc[4, 0]
    
    
    print(GetData.AdminTel)
    print(GetData.check_list)
    
    # df = pd.read_excel(project_path.test_case_path, sheet_name="phone")
    # print(df.iloc[0, 0])  # 获取phone表单中的A1单元格的值
    

    - 方法1:不使用反射,直接导入读取配置文件模块,直接读取

    import configparser
    
    """
    通过读取配置文件,来执行相应的测试用例
    配置文件分为2个部分
    第一部分:[SECTION],必须使用[]
    第二部分:option=value 键值对形式存储
    """
    
    cf = configparser.ConfigParser()
    # 打开配置文件,传入文件名和编码格式
    cf.read("case.config", encoding="utf-8")
    
    # 方法1取值
    # 读取配置文件的数据,传入section和option的值
    # res_1 = cf.get("MODE", "mode")
    # print(res_1)
    
    # 方法2取值,类似字典
    # res_2 = cf["MODE"]["mode"]
    # print(res_2)
    
    # 读取所有SECTION,结果是列表
    # print(cf.sections(), type(cf.sections()))
    
    # 读取某一分区下的数据,结果是列表,section中的键值对放在了元组中
    # print(cf.items("DREAM"))
    
    # 配置文件中的value,无论是数字还是列表或其他类型,读取出来后都是字符串类型
    # 通过eval去掉引号,转换为原来的数据
    age = cf.get("PERSON", "age")
    print(age, type(age))
    
    name = cf["PERSON"]["name"]
    print(name, type(name))
    
    favorite = cf.get("PERSON", "favorite")
    print(favorite, type(favorite))
    

      

    - 结果:仍然报错,原因是执行了引用模块中的代码, 在引用模块中的print(Get.check_list)语句, 在这里执行了所以报错

    A模块中有print语句a【a没有放在main下面】,B调用A时,也会执行a, 或者B只是引用了A模块,并没有调用其中的函数,也会执行a

     

     - 将上述代码注释掉就可以正常执行了

    方法2:找到出错原因,进行修改

    使用反射出错的原因是反射中有读取配置文件的代码,读取配置文件时要有文件的路径,在project_path中读取目录时没有使用绝对路径导致在其他模块引用反射时出错了,改成通过 os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]   获取路径就OK了

  • 相关阅读:
    CDE 快捷键
    shell 快捷键
    Monitor 问题
    vim 编辑快捷键
    MySQL 的include lib文件夹找不到怎么
    深入分析C++引用
    vim 查找匹配字符串次数
    如何配置Vim背景色以及字体?
    vim中字体和配色方案设置
    C#设置richtextbox滚动到最后一行
  • 原文地址:https://www.cnblogs.com/come202011/p/12236671.html
Copyright © 2020-2023  润新知