这些异常的行为是不同的。KeyError 执行以下操作并传递消息
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__().
可以为此使用以下解决方法:创建自己的带有repr覆盖的类:
例如
class X(str):
def __repr__(self):
return "'%s'" % self
raise KeyError(X('\x1b[31m ERROR \x1b[0m'))
但我真的不明白为什么需要这样做......我认为@BorrajaX 评论是更好的解决方案。