gpt4 book ai didi

python - 为什么 ConfigParser items() 给出原始字符串,而 get() 返回 bool/float/等?

转载 作者:行者123 更新时间:2023-12-01 05:24:28 24 4
gpt4 key购买 nike

我试图弄清楚为什么 ConfigParser 为 get() 方法提供了 Python 类型,但 items() 却提供了所有字符串,例如“True”而不是 True 等。

作为一种解决方法,我正在做这样的事情:

log_settings = dict(CONF.items('log'))
for key, value in log_settings.items():
log_settings[key] = CONF.get('log', key)

对此有什么想法吗?

最佳答案

来自ConfigParser来源:

def items(self, section):
try:
d2 = self._sections[section]
except KeyError:
if section != DEFAULTSECT:
raise NoSectionError(section)
d2 = self._dict()
d = self._defaults.copy()
d.update(d2)
if "__name__" in d:
del d["__name__"]
return d.items()

如您所见,.items() 不会对数据进行后处理以将其转换为任何类型。

<小时/>

顺便说一句,您确定 .get 没有做同样的事情吗? .get 的源代码不会强制转换数据,但 .getboolean 和 co 则不同。做。您确定没有使用 .getboolean.getfloat 吗?

在下面,您可以看到有一个辅助 ._get 函数,它调用 .get 以及 .getfloat 等的转换。

def _get(self, section, conv, option):
return conv(self.get(section, option))

def getfloat(self, section, option):
return self._get(section, float, option)

.get函数没有这样的转换(它是在._get中的.get之后完成的)

def get(self, section, option):
opt = self.optionxform(option)
if section not in self._sections:
if section != DEFAULTSECT:
raise NoSectionError(section)
if opt in self._defaults:
return self._defaults[opt]
else:
raise NoOptionError(option, section)
elif opt in self._sections[section]:
return self._sections[section][opt]
elif opt in self._defaults:
return self._defaults[opt]
else:
raise NoOptionError(option, section)

关于python - 为什么 ConfigParser items() 给出原始字符串,而 get() 返回 bool/float/等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21668411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com