python python-2.6

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.