Python触发异常时如何隐藏traceback仅输出核心报错信息
解决方案
两种常见实现方案,按需选择即可:
方案1:调用侧捕获异常按需输出
你只需要在调用division函数的位置加异常捕获逻辑,直接打印异常类型和异常信息,不会输出任何traceback内容:
def division(k, m): try: k / m except TypeError: raise ValueError ('hey') from None return k/ m # 调用时捕获异常 try: # 示例:传字符串触发TypeError,进而抛出你定义的ValueError division("test", 2) except Exception as e: print(f"{type(e).__name__}: {e}")
运行后输出结果为:
ValueError: hey
方案2:全局配置仅输出异常最后一行
如果不想每次调用都单独加捕获逻辑,可以修改Python默认的异常处理钩子,全局所有异常都只会输出最后一行内容:
import sys # 自定义异常处理逻辑,替换默认的全量traceback输出 def custom_excepthook(exc_type, exc_value, exc_traceback): print(f"{exc_type.__name__}: {exc_value}", file=sys.stderr) sys.excepthook = custom_excepthook def division(k, m): try: k / m except TypeError: raise ValueError ('hey') from None return k/ m # 直接调用即可,不需要单独捕获 division("test", 2)
运行后同样只会输出ValueError: hey。
注意:你原有代码里的
raise ... from None已经切断了异常上下文关联,不会额外输出异常上下文的关联提示,配合上面的方案即可完全满足需求。
内容的提问来源于stack exchange,提问作者David Jopo
相关产品推荐
相关产品推荐

