2
在完成with
部分后,我在下面的代码中收到AttributeError: __exit__
的错误。元素对象已在with
中返回,并已定义了__exit__
,所以我很困惑。正在接收AttributeError:__exit__,即使WITH对象已定义EXIT
class Builder:
def __init__(self):
print("Builder init fires")
def __getattr__(self, name):
return Element(name, self)
class Element:
def __init__(self, name, builder):
self.name = name
self.builder = builder
print("Element init fires for name of", self.name)
def __call__(*args, **kargs):
print("CALL fires, now with attributes listed:")
for attr, value in sorted(kargs.items()):
print(' %s=>%s' % (attr, value))
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
pass
aa = Builder()
with aa.feed(xmlns='http://www.w3.org/2005/Atom'):
print("INSIDE THE WITH")
当我运行代码时,由于'__call_'返回None,我得到了一个'__enter__'的AttributeError。 – BrenBarn
似乎在python 3.5.2下,它接收'__exit__'的'AttributeError',但在python 3.6.1下为__enter__'。我看你是正确的,'__call __()'确定'with'返回的内容,它需要'return self'。谢谢。 – markhern