[英]Why do I run into an infinite loop without __contains__?
以下代码运行到一个无限循环:
class SubCommandMap:
def __init__(self):
self._command = dict()
def __getitem__(self, key):
return self._command.get(key)
def __setitem__(self, key, value):
self._command[key] = value
m = SubCommandMap()
" " in m # <- why is this an infinite loop?
当然,这是一个错误。 m
被认为是不同类型的不同 object。 但是为什么这会导致无限循环而不是抛出异常呢?
我添加了以下方法:
def __contains__(self, other):
raise NotImplementedError()
现在我收到一条适当的错误消息。
还有其他类似的情况我需要小心避免无限循环吗?
在没有__contains__
的情况下, in
运算符将使用您定义的__getitem__
方法来查看它是否获得了您正在寻找的 object。 它会将每个 int 依次传递给__getitem__
,直到找到该项目或该方法引发异常。 如果这两种情况都没有发生,那么你就有了一个无限循环。
是的,还有其他类似的案例。
__getitem__
不引发异常,则尝试迭代实现__getitem__
但未实现__iter__
的 object 是一个无限循环。 看到这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.