¿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

ases la única forma de asignar la excepción a un local en Python 3.x. Peroasno 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
assintaxis. 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 unamulticatchque le permite capturar múltiples excepciones en unexceptbloque . 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éValueErrornunca se detectó la excepción. O usadoexcept (NameError, e):y se quedaron con unNameErrorpara'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
asobjetivo (junto con el resto de la información de excepción) se edita implícitamentedeltan pronto como salga delexceptbloque (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/finallydentro delexceptbloque para asegurarse de quedel ese realice antes de salir delexceptbloque.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.2fuente