我已经看过这个问题了:Python iterators – how to dynamically assign self.next within a new style class?
但这对我没有帮助,因为我想迭代错误的一个属性,这个属性是一个列表(即,已经可以迭代),而不必显式地使用该属性。我想这样做:
class SCE(Exception):
"""
An error while performing SCE functions.
"""
def __init__(self, value=None):
"""
Message: A string message or an iterable of strings.
"""
if value is None:
self._values = ['A general SCE error has occured.']
elif isinstance(value, str):
self._values = [value]
else:
self._values = list(value)
def __iter__(self):
return self._values
def __repr__(self):
return repr(self._values)
然而,在外壳里我得到了:
try:
raise CSE(['error one', 'error two'])
except CSE, e:
for i in e:
print(i)
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
TypeError: iter() returned non-iterator of type 'list'
我知道我可以从值中删除,然后遍历e.values,但我不想这样做,因为它公开了我的异常类的实现。
^{} 方法应该返回一个迭代器对象,但您返回的是一个列表对象。使用
而是解决这个问题。从
object.__iter__
(我的突出显示)的文档中:或者更通用的:
__iter__
需要返回一个迭代器,而不是一个列表。试试这个:
你也可以:
但我真的想不出为什么你需要这样做而不是使用
iter()
相关问题 更多 >
编程相关推荐