general errors custom python exception

errors - python rescue exception



¿Hay alguna diferencia entre "raise exception()" y "raise exception" sin parĂ©ntesis? (2)

Definición de una excepción sin parámetros:

class myException(Exception): pass

Cuando se plantea, ¿hay alguna diferencia entre:

raise myException

y

raise myException()

Al intentarlo, no pude encontrar ninguno. ¿Es simplemente una sintaxis sobrecargada?


La respuesta corta es que ambos raise MyException y hacen que raise MyException() haga lo mismo. Este primer formulario crea automáticamente su excepción.

La sección relevante de los documentos dice: " raise evalúa la primera expresión como el objeto de excepción. Debe ser una subclase o una instancia de BaseException. Si se trata de una clase, la instancia de excepción se obtendrá cuando sea necesario instanciando la clase con sin argumentos."

Dicho esto, a pesar de que la semántica es la misma, la primera forma es microscópicamente más rápida, y la segunda forma es más flexible (porque puede pasar sus argumentos si es necesario).

El estilo habitual que la mayoría de la gente usa en Python (es decir, en la biblioteca estándar, en las aplicaciones populares y en muchos libros) es usar raise MyException cuando no hay argumentos. Las personas solo crean una instancia de la excepción directamente cuando se deben pasar algunos argumentos. Por ejemplo: raise KeyError(badkey) .