Python 接收AttributeError:_退出_,即使WITH object已定义退出
在用完成Python 接收AttributeError:_退出_,即使WITH object已定义退出,python,python-3.x,Python,Python 3.x,在用完成部分后,我在下面的代码中收到一个错误AttributeError:\uu exit\uuu。元素对象已在中以返回,并且已定义了\uuuu退出,因此我感到困惑 class Builder: def __init__(self): print("Builder init fires") def __getattr__(self, name): return Element(name, self) class Element: def
部分后,我在下面的代码中收到一个错误AttributeError:\uu exit\uuu
。元素对象已在中以
返回,并且已定义了\uuuu退出
,因此我感到困惑
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")
带有
关键字的之后的表达式值必须是有效的上下文管理器。这意味着表达式的值必须具有属性\uuuuuuu进入
和\uuuuuu退出,并且这些属性必须接受文档中描述的参数。您可以轻松地验证partaa.feed
是否可以接受,但整个表达式的值为None
,并且没有必要的属性。Python3.5和3.6之间的一个区别是,一个在缺少\uuuuuuuuuuuuuuuuuuuuuu
时失败,而后者在缺少\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。没什么意外
您还忘记了self
行中的def\uuuu调用(self,*args,**kargs):
如果您使用args,这将是一个问题,而且它也是一个pythonic模式,也有未使用的args。当我运行代码时,我得到的AttributeError enter\uu
,因为您的\uuuu调用
没有返回任何值。在Python3.5.2下,它似乎接收到\uuuu退出
的属性错误,但在Python3.6.1下,它的\uuu输入
。我看你是对的,\uu call\uu()
用确定返回的内容,它需要返回self
。谢谢。与缺少参数类似,完全省略params和()将引发相同的异常。例如:带aa.feed: