2012-07-17 11 views
9

Realmente no sé cómo decirlo, pero cuando levanto excepción en Python 3.2, '\ n' no son analiza ...Python 3 excepción no imprimiendo nueva línea

Aquí es un ejemplo :

class ParserError(Exception): 
    def __init__(self, message): 
      super().__init__(self, message) 

try: 
    raise ParserError("This should have\na line break") 
except ParserError as err: 
    print(err) 

funciona así:

$ ./test.py 
(ParserError(...), 'This should have\na line break') 

¿Cómo me aseguro nuevas líneas se imprimen como nuevas líneas?

class ParserError(Exception): 
    pass 

o

print(err.args[1]) 
+2

se imprime (err.message) lo hacen? –

+1

No, el objeto no tiene atributo 'mensaje' – user1530147

+1

De manera interesante, si se deshace del método '__init__', solo el texto de excepción se imprime con su código y la nueva línea se imprime correctamente. – geoffspear

Respuesta

5

Ahh, err.message está desfasada y en 2,6 - por lo que ya no está presente, así que ...

print(err.args[1]) 
+1

'print (err.args [1]) 'aquí, ¿no? – DSM

+0

Ninguna de las 2 soluciones está funcionando ... – user1530147

+0

¡Espera, args [1] funciona! – user1530147

2

Lo que sucede aquí es que el repr de su cadena de mensaje se está imprimiendo en el marco de pasar todo el Exception objeto a print(), por lo que la nueva línea se está convirtiendo de nuevo en \n. Si individualmente print la cadena real, se imprimirá la nueva línea real.

+0

Mencioné 'err.message' pero la respuesta al comentario fue" no tiene atributo " –

+0

Cuando intento' print (err.message) 'Obtengo' 'ParserError' el objeto no tiene atributo 'message'' – Levon

Cuestiones relacionadas