Alternatywa dla contextlib.nested ze zmienną liczbą menedżerów kontekstu

Mamy kod, który wywołuje zmienną liczbę menedżerów kontekstu w zależności od parametrów środowiska wykonawczego:

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))

Jednak,contextlib.nested jest przestarzały od wersji Pythona 2.7:

DeprecationWarning: With-statements now directly support multiple context managers

Odpowiedzi naWiele zmiennych w instrukcji Pythona „z” wskaż tocontextlib.nested ma kilka „mylących dziwactw podatnych na błędy”, ale sugerowana alternatywa korzystania z wielu menedżerówwith instrukcja nie będzie działać dla zmiennej liczby menedżerów kontekstu (a także łamie kompatybilność wsteczną).

Czy są jakieś alternatywycontextlib.nested które nie są przestarzałe i (najlepiej) nie mają tych samych błędów?

Czy powinienem nadal używaćcontextlib.nested i zignorować ostrzeżenie? Jeśli tak, to powinienem zaplanowaćcontextlib.nested usunąć w przyszłości?

questionAnswers(4)

yourAnswerToTheQuestion