python用颜色引发KeyError消息

Posted

技术标签:

【中文标题】python用颜色引发KeyError消息【英文标题】:python raise KeyError message with color 【发布时间】:2013-06-25 09:14:58 【问题描述】:

似乎KeyError 消息的管理方式与其他错误不同。 例如,如果我想使用颜色,它适用于IndexError,但不适用于KeyError

err_message = '\x1b[31m ERROR \x1b[0m'

print err_message

raise IndexError(err_message)

raise KeyError(err_message)

知道为什么吗? 有没有办法绕过它? (我真的需要引发 KeyError 类型的异常,以便以后能够捕获它)

【问题讨论】:

您是否考虑过使用日志记录并为日志记录的输出着色而不是尝试为错误消息着色? ***.com/questions/384076/… 【参考方案1】:

这些异常的行为是不同的。 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 评论是更好的解决方案。

【讨论】:

感谢这个伟大的解决方法!它完成了工作!我会这样做而不是使用日志记录......在我的情况下似乎更容易!

以上是关于python用颜色引发KeyError消息的主要内容,如果未能解决你的问题,请参考以下文章

Pyudev:即使属性存在,也会引发 KeyError

KeyError 中错误消息的新行 - Python 3.3

python字典日期时间作为键,keyError

discord.ext.commands.errors.CommandInvokeError:命令引发异常:KeyError:'link'

解包时 defaultdict 引发 KeyError

使用 youtube API 返回 youtube livechat 消息的 Python 脚本会在一段时间后返回奇怪的 KeyError 和 NoneType 错误