multiple-with-statements (SIM117)
Derived from the flake8-simplify linter.
Fix is sometimes available.
What it does
Checks for the unnecessary nesting of multiple consecutive context managers.
Why is this bad?
In Python 3, a single with
block can include multiple context
managers.
Combining multiple context managers into a single with
statement
will minimize the indentation depth of the code, making it more
readable.
The following context managers are exempt when used as standalone statements:
anyio
.{CancelScope
,fail_after
,move_on_after
}asyncio
.{timeout
,timeout_at
}trio
.{fail_after
,fail_at
,move_on_after
,move_on_at
}
Example
Use instead:
Fix safety
This fix is marked as always unsafe unless preview mode is enabled, in which case it is always marked as safe. Note that the fix is unavailable if it would remove comments (in either case).