Python 3 异常未打印新行

12

我不太知道该如何表达,但当我在Python 3.2中引发异常时,'\n'没有被解析...

以下是一个示例:

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
print(err.message) 这样可以吗? - Jon Clements
1
没有,对象没有属性 'message'。 - user1530147
1
有趣的是,如果你删掉__init__方法,只有异常文本会和你的代码一起打印出来,并且换行符也会正确地打印出来。 - Wooble
2个回答

5

Ahh,err.message在2.6版中已过时 - 因此不再存在,所以...

print(err.args[1])

1
这里是 print(err.args[1]),对吧? - DSM
抱歉,我已经习惯了编写2.6/2.7版本的Python代码,当尝试编写3.x版本的代码时,我的大脑出现了故障! - Jon Clements
我不理解这是如何解决的。OP 希望在引发异常时打印换行符。你是在说我们必须捕获错误并自己正确地打印出来吗?标准的 traceback 将永远无法正确显示消息? - Ben Farmer

2
这里发生的是您的消息字符串的repr被打印作为传递整个Exception对象到print()的一部分,因此换行符被转换回\n。如果您单独print实际字符串,则实际换行符将打印出来。

我提到了 err.message,但是评论的回复是“没有属性”。 - Jon Clements
当我尝试使用print(err.message)时,我会得到'ParserError'对象没有'message'属性的错误信息。 - Levon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接