Notez que si vous divisez les variables en lignes, vous devez utiliser des barres obliques inversées pour encapsuler les nouvelles lignes.
with A() as a, \
B() as b, \
C() as c:
doSomething(a,b,c)
Les parenthèses ne fonctionnent pas, car Python crée à la place un tuple.
with (A(),
B(),
C()):
doSomething(a,b,c)
Comme les tuples n'ont pas d' __enter__
attribut, vous obtenez une erreur (non descriptive et n'identifie pas le type de classe):
AttributeError: __enter__
Si vous essayez d'utiliser as
entre parenthèses, Python détecte l'erreur au moment de l'analyse:
with (A() as a,
B() as b,
C() as c):
doSomething(a,b,c)
ErreurDeSyntaxe: Syntaxe invalide
https://bugs.python.org/issue12782 semble être lié à ce problème.