运行以下内容:
我该如何更改,以便在仍然允许访问那些键
(我尝试过放置
我的真实用例:(供阅读,如果有用请随意忽略此段之后的内容)
在应用某个补丁到iniparse之后,我发现了我的补丁的一个不良副作用。对于我的
class DontList(object):
def __getitem__(self, key):
print 'Getting item %s' % key
if key == 10: raise KeyError("You get the idea.")
return None
def __getattr__(self, name):
print 'Getting attr %s' % name
return None
list(DontList())
生成如下内容:
Getting attr __length_hint__
Getting item 0
Getting item 1
Getting item 2
Getting item 3
Getting item 4
Getting item 5
Getting item 6
Getting item 7
Getting item 8
Getting item 9
Getting item 10
Traceback (most recent call last):
File "list.py", line 11, in <module>
list(DontList())
File "list.py", line 4, in __getitem__
if key == 10: raise KeyError("You get the idea.")
KeyError: 'You get the idea.'
我该如何更改,以便在仍然允许访问那些键
[1]
等的情况下获得[]
?(我尝试过放置
def __length_hint__(self): return 0
,但并没有帮助。)我的真实用例:(供阅读,如果有用请随意忽略此段之后的内容)
在应用某个补丁到iniparse之后,我发现了我的补丁的一个不良副作用。对于我的
Undefined
类设置了 __getattr__
,它返回一个新的 Undefined
对象。 不幸的是,这意味着 list(iniconfig.invalid_section)
(其中 isinstance(iniconfig, iniparse.INIConfig)
)会执行以下操作(在__getattr__
和 __getitem__
中放置了简单的print
):Getting attr __length_hint__
Getting item 0
Getting item 1
Getting item 2
Getting item 3
Getting item 4
等等,无限。