Alternative zu contextlib.nested mit variabler Anzahl von Kontextmanagern
Wir haben Code, der abhängig von den Laufzeitparametern eine variable Anzahl von Kontextmanagern aufruft:
from contextlib import nested, contextmanager
@contextmanager
def my_context(arg):
print("entering", arg)
try:
yield arg
finally:
print("exiting", arg)
def my_fn(items):
with nested(*(my_context(arg) for arg in items)) as managers:
print("processing under", managers)
my_fn(range(3))
Jedoch,contextlib.nested
ist veraltet seit Python 2.7:
DeprecationWarning: With-statements now directly support multiple context managers
Die Antworten aufMehrere Variablen in der Python-Anweisung 'with' weisen darauf hin, dasscontextlib.nested
hat einige "verwirrende, fehleranfällige Macken", aber die vorgeschlagene Alternative zur Verwendung des Multi-Managerswith
Anweisung funktioniert nicht für eine variable Anzahl von Kontextmanagern (und bricht auch die Abwärtskompatibilität ab).
Gibt es Alternativen zucontextlib.nested
das sind nicht veraltet und (am besten) haben nicht die gleichen Fehler?
Oder soll ich weiterverwendencontextlib.nested
und die Warnung ignorieren? Wenn ja, sollte ich planencontextlib.nested
irgendwann in der Zukunft entfernt werden?