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?

Foi útil?

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

(fonte:http://python3porting.com/noconv.html)

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top