Qual é a diferença entre ',' e 'as' nas declarações exceto, por exemplo:
try:
pass
except Exception, exception:
pass
e:
try:
pass
except Exception as exception:
pass
A segunda sintaxe é legal no 2.6? Funciona no CPython 2.6 no Windows, mas o intérprete 2.5 no cygwin reclama que é inválido.
Se ambos são válidos no 2.6, qual devo usar?
python
python-2.6
Peter Graham
fonte
fonte
as
é a única maneira de atribuir a exceção a um local no Python 3.x. Masas
não é necessário , pois você não precisa especificá-lo, se não precisar.Sim, é legal. Estou executando o Python 2.6
Atualização : Há outro motivo para usar a
as
sintaxe. O uso,
torna as coisas muito mais ambíguas, como outros já apontaram; e aqui está o que faz a diferença. No Python 2.6, existe omulticatch
que permite capturar várias exceções em umexcept
bloco . Em tal situação, é mais expressivo e pitônico dizerao invés de dizer
que ainda funcionaria
fonte
except NameError, ValueError:
então se perguntaria por que aValueError
exceção nunca estava sendo capturada. Ou usadoexcept (NameError, e):
e foram deixados com umNameError
para'e'
!a sintaxe "as" é a preferida daqui para frente; no entanto, se seu código precisar trabalhar com versões mais antigas do Python (a 2.6 é a primeira a oferecer suporte à nova), será necessário usar a sintaxe da vírgula.
fonte
Se você deseja suportar todas as versões python, pode usar a
sys.exc_info()
função da seguinte maneira:(fonte: http://python3porting.com/noconv.html )
fonte
as
destino (junto com o restante das informações da exceção) é implicitamentedel
editado assim que você sai doexcept
bloco (isso impede que algumas referências cíclicas envolvidas no traceback armazenado atrasem a liberação da memória até que o GC cíclico volte a funcionar ) Portanto, esse código equivalente é um pouco menos equivalente, a menos que você use umtry/finally
dentro doexcept
bloco para garantir quedel e
seja executado antes de sair doexcept
bloco.A partir do Python 3.7 (não tenho certeza sobre outras versões), a sintaxe 'vírgula' não é mais suportada:
Arquivo de origem
exception_comma.py
:$ python --version --> Python 2.7.10
$ python3 --version --> Python 3.7.2
fonte