gpt4 book ai didi

Python configparser获取和设置无异常

转载 作者:太空狗 更新时间:2023-10-29 19:35:55 24 4
gpt4 key购买 nike

每次您尝试在 Python 中使用 configparser 获取或设置一个部分时,如果该部分不存在,它会抛出一个 NoSectionError。无论如何要避免这种情况?另外,我是否也可以在获取选项时避免 NoOptionError

例如,使用字典,有 setdefault 选项:当键不存在时,字典不会抛出 KeyError,而是添加键,设置key的值设置为默认值,并返回默认值。

我目前正在执行以下操作来获取属性:

def read_config(section):
config = configparser.ConfigParser()
config.read(location)
try:
apple = config.get(section, 'apple')
except NoSectionError, NoOptionError:
apple = None
try:
pear = config.get(section, 'pear')
except NoSectionError, NoOptionError:
pear = None
try:
banana = config(section, 'banana')
except NoSectionError, NoOptionError:
banana = None
return apple, pear, banana

以及以下用于设置它们的内容:

def save_to_config(section, apple, pear, banana):
config = configparser.ConfigParser()
if not os.path.exists(folder_location):
os.makedirs(folder_location)

config.read(location)
if section not in config.sections():
config.add_section(section)

config.set(section, 'apple', apple)
config.set(section, 'pear', pear)
config.set(section, 'banana', banana)

设置还不错,因为它们都有相同的部分,但是获取很好......太糟糕了。一定有更好的方法。

是否有一些衬垫可以减少这种情况:

try:
apple = config.get(section, 'apple')
except NoSectionError, NoOptionError:
apple = None

为此:

apple = config.get_with_default(section, 'apple', None)

-- 编辑--

我已尝试根据乐高的建议进行以下更改:

def read_config(section):
defaults = { section : {'apple': None,
'pear': None,
'banana': None }}
config = configparser.ConfigParser(defaults = defaults)
config.read(location)

apple = config.get(section, 'apple')
pear = config.get(section, 'pear')
banana = config(section, 'banana')

return apple, pear, banana

但是如果该部分不存在,这仍然会引发 NoSectionError

注意:我也试过 defaults = just {'apple': None, 'pear': None, 'banana': None }(无部分)

最佳答案

有几种方法可以解决这个问题,具体取决于您想要获得的复杂程度。

最简单的方法可能就是将逻辑链接在一起。 ConfigParser 定义 has_option安全地检查某个部分是否存在选项。

apple = config.has_option(section,'apple') and config.get(section,'apple') or None

或者,如果您提前知道哪些选项应该有值,您可以设置 defaults实例化解析器时的字典。这样做的好处是可以保留并引发您不知道的部分的任何错误。

 myDefaults = {'apple':None,'banana':None,'pear':None}
config = configparser.ConfigParser(defaults=myDefaults)

正如 Wogan 所说,您可以创建一个包装器函数,但您可以像这样轻松地再次使用 has_option:

def get_with_default(config,section,name,default)
if config.has_option(section,name):
return config.get(section,name)
else:
return default

关于Python configparser获取和设置无异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24832628/

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