Python异常信息格式化

3
问题: 使用%s格式化消息时为什么没有异常信息,而使用format时却有异常信息?

失败的情况:

>>> Exception('foo %s', 'bar').message
''

工作内容:

>>> Exception('foo {}'.format('bar')).message
'foo bar'

为什么在%s上失败了,有任何解释吗?


1
顺便提一下:message 属性已被弃用,较新版本的 Python 已经没有它了。使用 str(Exception(...)) 就可以获取消息了。此外,在 Python2 中似乎甚至没有记录 message,与 args 相反。我认为只有在构造函数中提供单个参数时才会设置 message,否则意味着异常包含其他数据在 args 中,基本实现并不假设您想将所有内容格式化为消息... - Bakuriu
@Bakuriu 我也注意到了这一点,我的hacky解决方法是这样的:>>> asdf = Exception('foo %s' % 'bar') 然后跟着 >>> asdf.message 这个在Python 2.7中可行。但是在Python3中已经完全删除了。 - Dartmouth
1个回答

7

你在Exception中使用的%-替换语法是不正确的。你需要使用%来指定替换字符串:

>>> Exception('foo %s' % 'bar').message
'foo bar'

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