Python自定义异常未被装饰器捕获的解决方法咨询
问题分析与修复方案
你的代码核心逻辑是正确的,若出现异常未被装饰器捕获的情况,大概率是代码缩进错误导致try-except块未正确包裹目标函数的调用。以下是确保异常被正确捕获的修正代码:
class CustomException(Exception): pass def custom_decorator(func): def wrapper(*args, **kwargs): try: # 确保函数调用完全处于try块范围内 result = func(*args, **kwargs) return result except CustomException as e: print(f"CustomException occurred: {str(e)}") # 可选:返回默认值,明确告知调用方执行结果 return None return wrapper @custom_decorator def divide(a, b): if b == 0: raise CustomException("Cannot divide by zero") return a / b # 调用测试 divide(10, 0)
关键说明:
- 装饰器的
wrapper函数必须保证func(*args, **kwargs)的执行完全在try代码块内,任何缩进失误都会导致异常绕过捕获逻辑。 - 原代码逻辑本身无错,若你运行时仍出现异常传播,检查是否在复制代码时丢失了正确缩进(比如
try块未完整包含函数调用)。 - 新增的
return None为可选优化,用于明确函数执行失败后的返回值,避免因默认返回None造成的潜在逻辑混淆。
运行修正后的代码,调用divide(10, 0)会输出:
CustomException occurred: Cannot divide by zero
且不会有异常传播到主程序。
内容的提问来源于stack exchange,提问作者Hamza Janjua
相关产品推荐
相关产品推荐

