如何在抛出自定义异常时隐藏其完整模块路径?
修改自定义异常的显示模块路径
要让自定义异常显示为foo.CustomException而非完整模块路径,最直接的方法是修改异常类的__module__属性,将其设置为包名'foo'。
单个异常类的实现
在你的CustomException类中添加__module__属性:
# foo/module/submodule/exceptions.py class CustomException(Exception): __module__ = 'foo' # 原有的类实现...
这样抛出异常时,错误信息就会显示为:
Traceback (most recent call last): ... foo.CustomException: hello
多个异常类的批量处理
如果有多个自定义异常,建议先定义一个基类,统一设置__module__,其他异常继承该基类即可:
# foo/module/submodule/exceptions.py class FooBaseException(Exception): __module__ = 'foo' class CustomException(FooBaseException): ... class AnotherCustomException(FooBaseException): ...
原理说明
Python在格式化异常信息时,会使用异常类的__module__属性值拼接类名。默认情况下__module__是类定义所在的完整模块路径,手动将其指定为包名后,就会替换掉原来的长模块路径,只保留包名作为前缀。
内容的提问来源于stack exchange,提问作者stinodego
相关产品推荐
相关产品推荐

