2012-07-17 39 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