2012-07-17 80 views
9

我真的不知道怎麼說,但是當我在Python 3.2引發異常,「\ n」是不是解析 ...Python的3例外,不打印新的生產線

下面是一個例子:

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) 

它的工作原理是這樣的:

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

如何確保新線印刷作爲新行?

class ParserError(Exception): 
    pass 

print(err.args[1]) 
+2

是否打印(err.message)做呢? – 2012-07-17 14:59:48

+1

不,對象有 – user1530147 2012-07-17 15:04:35

+1

Intrestingly,如果你擺脫'__init__'方法,只是除了文本打印與您的代碼沒有屬性「消息」,和換行打印正確。 – geoffspear 2012-07-17 15:13:31

回答

5

啊,err.message被棄用在2.6 - 因此不再存在,所以......

print(err.args[1]) 
+1

'打印( err.args [1])'在這裏,不是? – DSM 2012-07-17 15:09:48

+0

無2個的解決方案正在... – user1530147 2012-07-17 15:09:53

+0

等待,ARGS [1]的作品! – user1530147 2012-07-17 15:10:11

2

這裏發生的事情是,你的消息字符串的repr被打印爲傳遞整個Exception對象print()的一部分,所以換行符被轉換回\n。如果您單獨使用print實際字符串,則會打印實際的換行符。

+0

我提到'err.message'但對評論的答覆是「有沒有屬性」 – 2012-07-17 15:05:52

+0

當我嘗試'打印(err.message)'我得到'「ParserError」對象有沒有屬性「message'' – Levon 2012-07-17 15:05:54