为啥 str(KeyError) 添加额外的引号?
Posted
技术标签:
【中文标题】为啥 str(KeyError) 添加额外的引号?【英文标题】:Why does str(KeyError) add extra quotes?为什么 str(KeyError) 添加额外的引号? 【发布时间】:2014-09-19 20:39:05 【问题描述】:为什么KeyError
的字符串表示会在错误消息中添加额外的引号?所有其他内置异常只是直接返回错误消息字符串。
例如下面的代码:
print str(LookupError("foo"))
print str(KeyError("foo"))
产生以下输出:
foo
'foo'
我已经尝试过使用其他内置异常(IndexError
、RuntimeError
、Exception
等)的样本,它们都返回不带引号的异常消息。
help(KeyError)
表示__str__(...)
是在KeyError
中定义的,而LookupError
则使用BaseException
基类中定义的LookupError
。这解释了行为有何不同,但没有解释为什么 __str__(...)
在KeyError
中被覆盖。 built-in exceptions 上的 Python 文档没有说明这种差异。
针对 Python 2.6.6 测试
【问题讨论】:
【参考方案1】:这样做是为了让您可以正确检测到KeyError('')
。来自KeyError_str
function source:
/* If args is a tuple of exactly one item, apply repr to args[0].
This is done so that e.g. the exception raised by [''] prints
KeyError: ''
rather than the confusing
KeyError
alone. The downside is that if KeyError is raised with an explanatory
string, that string will be displayed in quotes. Too bad.
If args is anything else, use the default BaseException__str__().
*/
确实,如果str(value)
是空字符串,traceback
printing code 将不会打印异常值。
【讨论】:
以上是关于为啥 str(KeyError) 添加额外的引号?的主要内容,如果未能解决你的问题,请参考以下文章