Python tente ... exceto vírgula vs 'como' em exceto
-
22-09-2019 - |
Pergunta
Qual é a diferença entre ',' e 'como', exceto declarações, por exemplo:
try:
pass
except Exception, exception:
pass
e:
try:
pass
except Exception as exception:
pass
A segunda sintaxe é legal em 2.6? Funciona no CPython 2.6 no Windows, mas o intérprete 2.5 em Cygwin reclama que é inválido.
Se ambos são válidos em 2.6, o que devo usar?
Solução
O documento definitivo é PEP-3110: Exceções de captura
Resumo:
- No Python 3.x, usando
as
é requeridos Para atribuir uma exceção a uma variável. - No Python 2.6+, use o
as
Sintaxe, pois é muito menos ambígua e compatível com o Python 3.x. - No Python 2.5 e anterior, use a versão vírgula, já que
as
não é suportado.
Outras dicas
Sim, é legal. Estou executando o python 2.6
try:
[] + 3
except Exception as x:
print "woo hoo"
>>>
woo hoo
Atualizar: Há outro motivo para usar o as
sintaxe. Usando ,
Torna as coisas muito mais ambíguas, como outros apontaram; E aqui está o que faz a diferença. A partir do Python 2.6, existe multicatch
que permite que você Pegue várias exceções em um except
quadra. Em tal situação, é mais expressivo e pitônico dizer
except (exception1, exception2) as e
em vez de dizer
except (exception1, exception2), e
o que ainda funcionaria
A sintaxe "As" é a preferida daqui para frente, no entanto, se o seu código precisar trabalhar com versões Python mais antigas (2.6 é a primeira a apoiar a nova), você precisará usar a sintaxe de vírgula.
Se você deseja suportar todas as versões do Python, você pode usar o sys.exc_info()
função assim:
try:
a = 1/'0'
except (ZeroDivisionError, TypeError):
e = sys.exc_info()[1]
print(e.args[0])
No Python 3.7 (não tenho certeza sobre outras versões), a sintaxe 'vírgula' não é mais suportada:
Arquivo fonte exception_comma.py
:
try:
result = 1/0
except Exception, e:
print("An error occurred")
exit(1)
exit(0)
$ python --version --> Python 2.7.10
$ python exception_comma.py
An error occurred
$ python3 --version --> Python 3.7.2
$ python3 exception_comma.py
File "exception_comma.py", line 3
except Exception, e:
^
SyntaxError: invalid syntax