¿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 legal la segunda sintaxis 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?
python
python-2.6
Peter Graham
fuente
fuente
as
es la única forma de asignar la excepción a un local en Python 3.x. Peroas
no es obligatorio , ya que no tiene que especificarlo si no lo necesita en absoluto.Si es legal. Estoy ejecutando Python 2.6
Actualización : hay otra razón para usar la
as
sintaxis. El uso,
hace que las cosas sean mucho más ambiguas, como han señalado otros; y esto es lo que hace la diferencia. A partir de Python 2.6, existe unamulticatch
que le permite capturar múltiples excepciones en unexcept
bloque . En tal situación, es más expresivo y pitónico deciren lugar de decir
que todavía funcionaría
fuente
except NameError, ValueError:
luego te preguntarías por quéValueError
nunca se detectó la excepción. O usadoexcept (NameError, e):
y se quedaron con unNameError
para'e'
!la sintaxis "as" es la preferida en el futuro, sin embargo, si su código necesita funcionar con versiones anteriores de Python (2.6 es la primera en admitir la nueva), deberá usar la sintaxis de coma.
fuente
Si desea admitir todas las versiones de Python, puede usar la
sys.exc_info()
función de esta manera:(fuente: http://python3porting.com/noconv.html )
fuente
as
objetivo (junto con el resto de la información de excepción) se edita implícitamentedel
tan pronto como salga delexcept
bloque (esto evita que algunas referencias cíclicas involucradas en el rastreo almacenado retrasen la liberación de memoria hasta que el GC cíclico comience a funcionar ) Por lo tanto, este código equivalente es ligeramente menos equivalente, a menos que use untry/finally
dentro delexcept
bloque para asegurarse de quedel e
se realice antes de salir delexcept
bloque.A partir de Python 3.7 (no estoy seguro acerca de otras versiones), la sintaxis 'coma' ya no es compatible:
Archivo fuente
exception_comma.py
:$ python --version --> Python 2.7.10
$ python3 --version --> Python 3.7.2
fuente