2012-07-17 11 views
9

Io in realtà non so come dirlo, ma quando alzo eccezione in python 3.2, '\ n' non sono analizzato ...Python 3 eccezione non stampando nuova linea

Ecco un esempio :

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) 

funziona così:

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

come mi assicuro nuove linee vengono stampate come nuove linee?

class ParserError(Exception): 
    pass 

o

print(err.args[1]) 
+2

Does stampa (err.message) lo fanno? –

+1

No, l'oggetto non ha attributo 'messaggio' – user1530147

+1

In modo intransigente, se si elimina il metodo '__init__', solo il testo dell'eccezione viene stampato con il codice e la nuova riga viene stampata correttamente. – geoffspear

risposta

5

Ahh, err.message è stata sconsigliata a 2,6 - così non è più presente, quindi ...

print(err.args[1]) 
+1

' print (err.args [1]) 'qui, no? – DSM

+0

Nessuna delle 2 soluzioni funziona ... – user1530147

+0

Aspetta, args [1] funziona !! – user1530147

2

Quello che sta succedendo qui è che il repr della stringa messaggio viene stampato come parte di passare tutta la Exception oggetto da print(), quindi il ritorno a capo viene convertito nuovamente dentro \n. Se singolarmente lo print la stringa effettiva, verrà stampata la nuova riga effettiva.

+0

Ho menzionato 'err.message' ma la risposta al commento era" non ha attributo " –

+0

Quando provo' print (err.message) 'ottengo l'oggetto '' ParserError 'non ha attributo' messaggio'' – Levon