2012-07-16 12 views

Respuesta

49

El único argumento para elevar indica la excepción a ser elevado. Debe ser una instancia de excepción o una clase de excepción (una clase que se deriva de Exception).

Prueba esto:

test = 'abc' 
if True: 
    raise Exception(test + 'def') 
14

Debe ser una excepción.

que quiere hacer algo como:

raise RuntimeError(test + 'def') 

En Python 2.5 y por debajo, el código funcionaría, ya que entonces se le permitió elevar las cadenas como excepciones. Esta fue una decisión muy mala, y se eliminó en 2.6.

+2

Podría explicar por qué es tan malo para elevar una cadena como una excepción? – BioGeek

+3

@BioGeek Los problemas con las excepciones de cadena incluyen solo algunas veces cuando se usa un literal tanto en 'raise' como' except', no proporciona un mecanismo OO para adjuntar información adicional a la excepción y no permite capturar categorías de múltiples tipos de excepción . Las excepciones se agregaron al idioma antes de las clases, y una vez que se agregaron las clases de excepción, las excepciones de cadenas solo se conservaron para compatibilidad con versiones anteriores. Su eliminación, como cualquier eliminación de (mis) características, simplificó el lenguaje. –

+0

Gracias por mencionar la versión donde esta característica fue soportada por última vez. Eso me ayudó. – SpaceTrucker

32

No puede raise a str. Solo Exception s puede ser raise d.

Por lo tanto, es mejor construir una excepción con esa cadena y plantear eso. Por ejemplo, se podría hacer:

test = 'abc' 
if True: 
    raise Exception(test + 'def') 

O

test = 'abc' 
if True: 
    raise ValueError(test + 'def') 

Espero que ayude

+0

Además, no puedes simplemente plantearte sin ningún argumento. –

Cuestiones relacionadas