general errors custom python exception

errors - python rescue exception



Incoherencia de SyntaxError en Python? (2)

Considere estos dos fragmentos:

try: a+a=a except SyntaxError: print "first exception caught"

.

try: eval("a+a=a") except SyntaxError: print "second exception caught"

En el segundo caso, se imprime la declaración de "segunda excepción" (excepción capturada), mientras que en la primera no.

¿La primera excepción (llamémosla "SyntaxError1") es diferente de la segunda ("SyntaxError2")?

¿Hay alguna forma de atrapar SyntaxError1 (por lo tanto, suprimir los errores de tiempo de compilación)? Envolver bloques grandes de código en eval es insatisfactorio;)


En el primer caso, la excepción es planteada por el compilador, que se está ejecutando antes de que la estructura try/except incluso exista (dado que es el compilador quien la configurará justo después del análisis). En el segundo caso, el compilador se ejecuta dos veces, y la excepción se plantea cuando el compilador se ejecuta como parte de eval , después de que la primera ejecución del compilador ya ha configurado try/except .

Por lo tanto, para interceptar los errores de sintaxis, de una manera u otra, debe organizar que el compilador ejecute dos veces: eval es de una manera, la función incorporada de compile explícita llama a otra, import es bastante útil (después de escribir el código en otro archivo) ), exec y execfile otras posibilidades todavía. Pero como sea que lo haga, los errores de sintaxis pueden capturarse solo después de que el compilador se haya ejecutado por primera vez para configurar los bloques try/except que necesita.


Respuesta corta: No.

Los errores de sintaxis ocurren cuando se analiza el código, que para el código Python normal es antes de que se ejecute el código: el código no se está ejecutando dentro del bloque try / except ya que el código no se está ejecutando, punto.

Sin embargo, cuando evalúa o ejecuta algún código, lo analiza en tiempo de ejecución, por lo que puede detectar la excepción.