Python自定义Exception:如何实现指定格式的报错信息输出?
解决自定义异常的格式输出问题
问题出在你在自定义异常的__init__方法中直接调用print,这会导致打印内容先于异常追踪信息输出,同时没有正确设置异常的错误消息。要实现预期的报错格式,需要让异常的字符串表示返回你想要的格式化内容,而不是手动打印。
修改方案一:初始化时构造完整消息并传给父类
class MissingPrimaryKeysError(Exception): """MissingPrimaryKeysError exception class""" def __init__(self, missing_keys, message="The following tables are missing primary keys:"): # 拼接完整的错误消息 full_message = f"{message}\n" + "\n".join(missing_keys) # 调用父类Exception的初始化方法,传入完整消息 super().__init__(full_message) self.missing_keys = missing_keys self.message = full_message tables_missing_pk = ['some_table', 'other_table'] if tables_missing_pk: raise MissingPrimaryKeysError(tables_missing_pk)
修改方案二:重写__str__方法自定义异常显示内容
class MissingPrimaryKeysError(Exception): """MissingPrimaryKeysError exception class""" def __init__(self, missing_keys, message="The following tables are missing primary keys:"): self.missing_keys = missing_keys self.message = message # 调用父类初始化方法 super().__init__() def __str__(self): # 返回格式化后的错误消息 return f"{self.message}\n" + "\n".join(self.missing_keys) tables_missing_pk = ['some_table', 'other_table'] if tables_missing_pk: raise MissingPrimaryKeysError(tables_missing_pk)
原理说明
- 避免在异常的
__init__中直接打印:异常对象创建时就会执行__init__中的打印逻辑,这会早于Python解释器输出异常追踪信息,导致顺序颠倒。 - 利用Python异常的默认行为:当异常被抛出时,解释器会调用异常对象的
__str__方法获取错误消息,并将其与追踪信息一起输出。通过构造好格式化的字符串并让__str__返回它,就能实现你想要的报错格式。
内容的提问来源于stack exchange,提问作者Joep
相关产品推荐
相关产品推荐

