You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:12:48