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了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM