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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage