Python如何动态访问config配置文件中的变量
Python动态读取配置文件变量的解决方案
错误原因
你之前的写法不符合Python的属性访问规则:
cf.var+str(variable_no)会被解析为先取cf的var属性(你的配置文件无该属性会直接报错),再将属性值和字符串拼接,和你预期的「拼接属性名再访问」逻辑完全不符。cf.new_var会被解析为访问cf下名为new_var的固定属性,不会将你之前定义的new_var变量的值作为属性名读取,配置文件无该属性因此报错。
正确实现方法
方法1:使用getattr()内置函数(最推荐)
getattr()专门用于动态获取对象/模块的属性,直接传入属性名的字符串形式即可:
import config as cf for variable_no in range(1, int(cf.total_var_count) + 1): # 第三个参数为可选默认值,找不到对应属性时会返回该值,避免抛出异常 var_value = getattr(cf, f"var{variable_no}", None) print(var_value)
方法2:访问模块内置的__dict__字典
模块的所有属性都会存储在自带的__dict__字典中,直接用字符串作为key读取即可:
import config as cf new_var = 'var1' print(cf.__dict__[new_var])
优化建议
如果可以修改配置文件,更推荐直接用列表或字典存储批量变量,不需要动态拼属性名,可维护性更高:
配置文件修改示例:
total_var_count = 4 # 用列表存储 var_list = [1,2,3,4] # 也可以用字典存储 var_dict = {"var1":1, "var2":2, "var3":3, "var4":4}
主文件读取示例:
import config as cf # 直接遍历列表 for value in cf.var_list: print(value) # 按键读取字典 print(cf.var_dict["var1"])
内容的提问来源于stack exchange,提问作者user16800232
相关产品推荐
相关产品推荐

