跳到内容

multiple-with-statements (SIM117)

源自 flake8-simplify 代码检查器。

有时提供修复。

作用

检查多个连续上下文管理器的不必要嵌套。

为什么这不好?

在 Python 3 中,单个 with 代码块可以包含多个上下文管理器。

将多个上下文管理器合并到单个 with 语句中,可以最大限度地减少代码的缩进深度,使其更具可读性。

以下上下文管理器在用作独立语句时会被豁免

  • anyio.{CancelScope, fail_after, move_on_after}
  • asyncio.{timeout, timeout_at}
  • trio.{fail_after, fail_at, move_on_after, move_on_at}

示例

with A() as a:
    with B() as b:
        pass

建议改为

with A() as a, B() as b:
    pass

修复安全性

此修复被标记为始终不安全,除非启用了 预览 模式,在这种情况下它始终被标记为安全。 请注意,如果该修复会删除注释(无论在哪种情况下),则该修复不可用。

参考