如何修改Python自定义异常在回溯信息中显示的所属模块路径
解决方法
要实现回溯中仅显示MyPackage.MyError,按以下两步修改即可:
- 调整自定义异常的定义,在
MyPackage/exceptions.py中手动指定__module__属性为顶层包名:
class MyError(Exception): __module__ = "MyPackage" pass
- 在包顶层的
MyPackage/__init__.py中导入该异常,将其暴露为包的公开属性:
from .exceptions import MyError # 可选:添加到__all__明确公开接口 __all__ = ["MyError"]
原理解释
Python回溯信息中展示的异常类路径,默认由异常类的__module__属性值加类名拼接生成,手动修改该属性为顶层包名即可调整展示效果。将异常导入包顶层__init__.py是为了符合通用的包使用习惯,用户可以直接通过from MyPackage import MyError导入异常,不需要感知内部的exceptions模块层级。
之前修改__module__不生效的常见原因是修改时机错误,必须在异常类的定义位置直接设置该属性,在其他模块导入后再修改不会生效。
内容的提问来源于stack exchange,提问作者Sue Dunham
相关产品推荐
相关产品推荐

