You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:27:15