2012-07-17 23 views
9

ja naprawdę nie wiem jak to powiedzieć, ale kiedy podnieść wyjątek w Pythonie 3.2, „\ n” nie są analizowany ...Python 3 wyjątek nie drukuje nową linię

Oto przykład :

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) 

to działa tak:

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

jak mogę mieć pewność, że nowe linie są drukowane jako nowe linie?

class ParserError(Exception): 
    pass 

lub

print(err.args[1]) 
+2

zostanie wydrukowany (err.message) zrobić? –

+1

Nie, obiekt nie ma atrybutu "wiadomość" – user1530147

+1

Interesująco, jeśli pozbędziesz się metody "__init__", tylko tekst wyjątku zostanie wydrukowany wraz z kodem, a znak nowej linii zostanie poprawnie wydrukowany. – geoffspear

Odpowiedz

5

Ahh, err.message została zaniechana w 2.6 - więc już nie występują, więc ...

print(err.args[1]) 
+1

' print (err.args [1]) "tutaj, nie? – DSM

+0

Żadne z 2 rozwiązań nie działa ... – user1530147

+0

Czekaj, args [1] działa !! – user1530147

2

Co tu się dzieje jest to, że repr wiadomości ciąg jest drukowany jako część przechodząc cały Exception obiekt do print(), więc nowej linii jest przekształcany z powrotem do \n. Jeśli osobiście print rzeczywisty ciąg znaków, zostanie wydrukowany rzeczywisty znak nowej linii.

+0

wspominałem 'err.message' ale odpowiedź na komentarz był„nie ma atrybutu” –

+0

Kiedy próbuję' print (err.message) '' uzyskać obiekt „ParserError” nie ma atrybutu „message'' – Levon