Los siguientes fragmentos de código hacen lo mismo. Capturan cada excepción y ejecutan el código en el except:
bloque
Fragmento 1 -
try:
#some code that may throw an exception
except:
#exception handling code
Fragmento 2 -
try:
#some code that may throw an exception
except Exception as e:
#exception handling code
¿Cuál es exactamente la diferencia en ambas construcciones?
python
python-3.x
narendranathjoshi
fuente
fuente
except Exception, e:
yexcept Exception as e:
. Esta pregunta pregunta cuál es la diferencia entreexcept:
yexcept Exception as e:
.Respuestas:
En el segundo puede acceder a los atributos del objeto de excepción:
Pero no detecta
BaseException
ni las excepciones que salen del sistemaSystemExit
,KeyboardInterrupt
yGeneratorExit
:Que un desnudo, excepto:
Consulte la sección Excepciones incorporadas de los documentos y la sección Errores y excepciones del tutorial para obtener más información.
fuente
Exception
se deriva deBaseException
, por esoexcept Exception
no atrapaBaseException
. Si escribesexcept BaseException
, también será atrapado. Desnudoexcept
simplemente atrapa todo.except
debe ser el último en una serie deexcept
bloques, mientras que no obtendrá un error si lo colocaexcept Exception
antes de otrosexcept
bloques: simplemente se ignorarán en silencio (si manejanException
subclases). Algo a tener en cuenta.except
yexcept Exception
. "Algo a tener en cuenta" parece un poco extraño ahora, pero en ese momento esperaba que Python eligiera elexcept
bloque más específico , independientemente de dónde estuviera, y me decepcionó un poco descubrir lo contrario.acepta todas las excepciones, mientras que
sólo acepta excepciones que estás significaba para la captura.
Aquí hay un ejemplo de uno que no debes atrapar:
El primero silenció el
KeyboardInterrupt
!Aquí hay una lista rápida:
Si quieres atrapar alguno de ellos, es mejor hacerlo
para señalar que sabes lo que estás haciendo.
Todas las excepciones provienen
BaseException
, y aquellas de las que debes atrapar día a día (las que se lanzarán para el programador) también heredanException
.fuente
except(Exception)
nunca atrapaKeyboardInterrupt
errores.as e
no tiene nada que ver con eso.as e
, porque supuse que es obvio lo que hace.SystemExit
o de lasKeyboardInterrupt
que escapar. No es un caso común, pero sucede.Existen diferencias con algunas excepciones, por ejemplo, KeyboardInterrupt.
Lectura PEP8 :
fuente
El uso del segundo formulario le proporciona una variable (nombrada en función de la
as
cláusula, en su ejemploe
) en elexcept
ámbito del bloque con el objeto de excepción vinculado a él para que pueda usar la información en la excepción (tipo, mensaje, seguimiento de pila, etc.) para manejar la excepción en una mansión más especialmente adaptada.fuente
Otra forma de ver esto. Consulte los detalles de la excepción:
Hay muchas "cosas" para acceder usando la sintaxis 'como e'.
Este código estaba destinado únicamente a mostrar los detalles de esta instancia.
fuente