【问题标题】:Python Error: AttributeError: __enter__ [duplicate]Python错误:AttributeError:__enter__ [重复]
【发布时间】:2025-11-29 12:00:01
【问题描述】:

当我尝试运行代码时收到属性错误。

    with ParamExample(URI) as pe:
    with MotionCommander(pe, default_height=0.3)as mc:

这是发生错误的地方。

Traceback (most recent call last):
File "test44.py", line 156, in <module>
with ParamExample(URI) as pe:
AttributeError: __enter__

这是我在终端中收到的回溯。 如果您需要查看我的更多代码,请告诉我。 任何帮助表示赞赏,谢谢!

【问题讨论】:

  • 你需要在你的类中实现__enter__并在其中返回self。
  • 您希望with Something(...) as something: 构造做什么?
  • 当你忘记括号时也会发生,例如:with Session: 而不是 with Session() 使用 tensorflow
  • 我在执行 /tmp 文件夹时遇到了同样的错误
  • 或者如果有人在做异步编程,别忘了把:async with

标签: python python-3.x crazyflie


【解决方案1】:

更多代码将不胜感激(特别是ParamExample 实现),但我假设您缺少该类上的__enter__(可能还有__exit__)方法。

当您在 python 中使用 with 块时,with 语句中的对象将调用其 __enter__ 方法,with 内的块运行,然后调用 __exit__(可选地带有异常信息)如果有人提出)。因此,如果您没有在类中定义 __enter__,您将看到此错误。

旁注:您需要缩进第二个 with 块,使其实际上在第一个块内,或者将这两行替换为

with ParamExample(URI) as pe, MotionCommander(pe, default_height=0.3) as mc:

这与嵌套这两个上下文管理器(with 块使用的对象的名称)相同。

【讨论】: