gpt4 book ai didi

python - 如何修补 ConfigParser 键/值?

转载 作者:太空宇宙 更新时间:2023-11-03 16:52:58 27 4
gpt4 key购买 nike

当我使用以下代码时:

from unittest import mock
import configparser

configtext = '''
[SECTION]
whatever=True
'''

config = configparser.ConfigParser()
config.read_string(configtext)


def test_fails():
expected_value = 'fnord'
with mock.patch.dict(config, {'db': expected_value}):
assert config['db'] is expected_value

我的测试失败,因为AttributeError:'str'对象没有属性'items'

这根本不是我所期望的。显然我希望它能像我想要的那样设置值...但不幸的是,显然配置只是字典式的。

如何修补此问题,以便 config['db'] 成为我想要的值,仅适用于我的测试的生命周期?

最佳答案

看来问题是我有一点误解。尽管 ConfigParser 看起来像字典,但实际上并非如此。堆栈跟踪记录了这一点的证据:

    def test_fails():
expected_value = 'whatever'
> with mock.patch.dict(config, {'db': expected_value}):

test.py:15:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.5/unittest/mock.py:1593: in __enter__
self._patch_dict()
/usr/lib/python3.5/unittest/mock.py:1619: in _patch_dict
in_dict[key] = values[key]
/usr/lib/python3.5/configparser.py:969: in __setitem__
self.read_dict({key: value})
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <configparser.ConfigParser object at 0x7f1be6d20f98>, dictionary = {'db': 'whatever'}
source = '<dict>'

请注意,它正在尝试在此处执行 read_dict 操作。那是因为它期望有一个 section-ish格式:

>>> parser = configparser.ConfigParser()
>>> parser.read_dict({'section1': {'key1': 'value1',
... 'key2': 'value2',
... 'key3': 'value3'},
... 'section2': {'keyA': 'valueA',
... 'keyB': 'valueB',
... 'keyC': 'valueC'},
... 'section3': {'foo': 'x',
... 'bar': 'y',
... 'baz': 'z'}
... })

来自文档

不可能进行单键访问。要使此示例正常工作,您必须执行以下操作:

with mock.patch.dict(config, {'db': {'db': expected_value}}):
# rest of code

注意:值将转换为其对应的字符串。因此,如果您尝试在此处存储实际的数据库连接(或类似的连接),它将无法工作。

关于python - 如何修补 ConfigParser 键/值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35710601/

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