Pregunta Python, rasing una excepción sin argumentos


Me gustaría conocer la mejor práctica para plantear una excepción sin argumentos. En la documentación oficial de Python, puedes ver esto:

try:
    raise KeyboardInterrupt

(http://docs.python.org/tutorial/errors.html cap. 8.6)

y en algunos códigos diferentes, como Django o el código de Google, puedes ver esto:

  def AuthenticateAndRun(self, username, password, args):
    raise NotImplementedError()

(http://code.google.com/p/neatx/source/browse/trunk/neatx/lib/auth.py)

La excepción es instanciar antes de plantearse mientras no haya argumento. ¿Cuál es el propósito de instanciar una excepción sin argumentos? ¿Cuándo debería usar el primer caso o el segundo caso?

Gracias por adelantado Fabien


10
2017-07-12 12:43


origen


Respuestas:


La generación de una clase de excepción en lugar de una instancia de excepción es una sintaxis obsoleta y no debe utilizarse en un código nuevo.

raise Exception, "This is not how to raise an exception..."

3
2017-07-12 12:48



Puede usar la forma que desee. No hay diferencia real y ambos son legales en Python 2 y 3. Guía de estilo de Python no especifica cuál es el recomendado.


Un poco más de información sobre el soporte de "forma de clase":

try:
    raise KeyboardInterrupt

Esta forma es perfectamente legal en Python 2 y 3. Extracto de pep-3109:

raise EXCEPTION se usa para generar una nueva excepción. Esta forma tiene dos   subvariantes: EXCEPTION puede ser una clase de excepción o una instancia de un   clase de excepción; las clases de excepción válidas son BaseException y su   subclases [5]. Si EXCEPTION es una subclase, se invocará sin   argumentos para obtener una instancia de excepción.

También se describe en Documentación de Python:

... Si es una clase, la instancia de excepción se obtendrá cuando sea necesario   al crear una instancia de la clase sin argumentos.


3
2018-03-05 07:45



En lenguajes como C ++ puedes subir cualquier objeto, no solo Excepciones. Python es más limitado. Si intentas :

raise 1

Usted obtiene:

Traceback (most recent call last):
...
TypeError: exceptions must be old-style classes or derived from BaseException, not int

En el modelo de programación de python, generalmente puede usar una clase por sí misma en lugar de una instancia (esto es útil para la creación rápida de instancias únicas, simplemente defina una clase). Por lo tanto, no es de extrañar que pueda generar una clase de excepción en lugar de una instancia de excepción.

Sin embargo, como dijo Ignacio, eso está en desuso.

Además, alguna nota lateral que no es la pregunta directa:

También podrías ver solo por sí mismo en algún código. Sin ninguna clase de objeto ni nada. Se usa en controladores de excepciones para volver a generar la excepción actual y mantendrá el rastreo inicial.


0
2017-07-12 12:58



Preguntas populares