Observe que, se você dividir as variáveis em linhas, deverá usar barras invertidas para quebrar as novas linhas.
with A() as a, \
B() as b, \
C() as c:
doSomething(a,b,c)
Parênteses não funcionam, pois o Python cria uma tupla.
with (A(),
B(),
C()):
doSomething(a,b,c)
Como as tuplas não possuem um __enter__
atributo, você recebe um erro (não descritivo e não identifica o tipo de classe):
AttributeError: __enter__
Se você tentar usar as
entre parênteses, o Python detectará o erro no momento da análise:
with (A() as a,
B() as b,
C() as c):
doSomething(a,b,c)
SyntaxError: sintaxe inválida
https://bugs.python.org/issue12782 parece estar relacionado a esse problema.