Python prueba... excepto coma vs ''como'' en excepto
python-2.6 (4)
¿Cuál es la diferencia entre '','' y ''como'' en las declaraciones de excepción, por ejemplo:
try:
pass
except Exception, exception:
pass
y:
try:
pass
except Exception as exception:
pass
¿Es la segunda sintaxis legal en 2.6? Funciona en CPython 2.6 en Windows, pero el intérprete 2.5 en cygwin se queja de que no es válido.
Si ambos son válidos en 2.6, ¿qué debo usar?
El documento definitivo es PEP-3110: Atrapar excepciones.
Resumen:
- En Python 3.x, usar
as
se requiere para asignar una excepción a una variable. - En Python 2.6+, use la sintaxis
as
, ya que es mucho menos ambigua y compatible con Python 3.x. - En Python 2.5 y versiones anteriores, use la versión con coma, ya
as
no es compatible.
Si desea admitir todas las versiones de python, puede usar la función sys.exc_info () de esta manera:
try:
a = 1/''0''
except (ZeroDivisionError, TypeError):
e = sys.exc_info()[1]
print(e.args[0])
(fuente: http://python3porting.com/noconv.html )
Si es legal Estoy corriendo Python 2.6
try:
[] + 3
except Exception as x:
print "woo hoo"
>>>
woo hoo
Actualización : hay otra razón para usar la sintaxis as
. Usar ,
hace las cosas mucho más ambiguas, como han señalado otros; y esto es lo que hace la diferencia. A partir de Python 2.6, existe un multicatch
que le permite capturar múltiples excepciones en un except
bloque . En tal situación, es más expresivo y pitónico decir
except (exception1, exception2) as e
en lugar de decir
except (exception1, exception2), e
que aun funcionaria
la sintaxis "como" es la preferida, pero si su código necesita trabajar con versiones antiguas de Python (2.6 es la primera en admitir la nueva), entonces deberá usar la sintaxis de coma.