如何在异常内部抛出新异常且不显示traceback,仅打印指定报错信息
现有代码的问题
你当前的写法中raise ValueError ('hey') from None仅能屏蔽异常的上下文关联信息,无法关闭Python默认的异常栈、异常类型打印逻辑,因此输出仍会包含traceback等多余内容,和参数是否为字符串类型无关。
方案1:直接打印指定内容后退出
如果你不需要向上层抛出异常供其他逻辑捕获,仅需要触发错误时输出hey后终止程序,直接在捕获分支输出内容后主动退出即可:
import sys def division(k, m): try: return k / m except TypeError: print('hey') sys.exit(1)
该方案无论传入字符串还是其他会触发TypeError的参数,都会仅输出hey后退出,完全符合需求中的输出效果。
方案2:自定义异常+修改全局异常打印逻辑
如果业务需要保留抛出异常的逻辑供上层代码捕获,可以自定义异常类并修改Python默认的全局异常打印规则:
import sys # 自定义仅输出消息的异常类 class CustomValueError(Exception): pass def custom_exception_handler(exc_type, exc_val, exc_tb): if exc_type == CustomValueError: # 自定义异常仅打印错误信息 print(exc_val) return # 其他异常走默认打印逻辑 sys.__excepthook__(exc_type, exc_val, exc_tb) # 替换全局异常处理钩子 sys.excepthook = custom_exception_handler def division(k, m): try: return k / m except TypeError: raise CustomValueError('hey') from None
这种方案下如果该异常未被上层捕获,最终打印时也只会输出hey,没有其他多余内容。
内容的提问来源于stack exchange,提问作者David Jopo
相关产品推荐
相关产品推荐

