gpt4 book ai didi

Python 字典类, 'KeyError'

转载 作者:太空狗 更新时间:2023-10-30 02:33:47 25 4
gpt4 key购买 nike

我有以下类用于存储其他对象访问的设置:

#!/usr/bin/env python                                                           

class Settings:
"""Singleton settings class"""

settings = {
'SectionA': {'a': 1, 'b': 2, 'c': 3},
'SectionB': {'d': 4, 'e': 5, 'f': 6}
}

def __getitem__(self, key): return self.settings[key]
def __setitem__(self, key, item): self.settings[key] = item
def keys(self): return self.settings.keys()

s = Settings()
print s.keys()
print s['SectionA']
print s['SectionB']

for key in s: print s[key]

我不明白为什么它会产生以下输出或如何绕过它,非常感谢任何帮助:

foo@bar:~$ python Settings.py
['SectionB', 'SectionA']
{'a': 1, 'c': 3, 'b': 2}
{'e': 5, 'd': 4, 'f': 6}
Traceback (most recent call last):
File "Settings.py", line 20, in <module>
for key in s: print s
File "Settings.py", line 11, in __getitem__
def __getitem__(self, key): return self.settings[key]
KeyError: 0
foo@bar:~$

最佳答案

那是因为当您迭代 Settings 类时,它显然会尝试按索引迭代它,就像列表一样。第一个索引是 0,它给出了一个 KeyError,因为它不在你的字典中。您必须定义特殊方法来覆盖 for key in s 语法以迭代您的键。

def __iter__(self): return iter(self.settings)

编辑:另一件事是您正在使用已弃用的旧样式类。您应该将其更改为 Settings(object)

关于Python 字典类, 'KeyError',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11855618/

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