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

定义抽象方法时:raise NotImplementedError()还是NotImplementedError?哪种正确?

在抽象方法中,该抛NotImplementedError()还是NotImplementedError?

结论先摆出来:优先用NotImplementedError()(带括号的实例),二者的核心区别看下面:

1. 本质不一样

  • NotImplementedError是Python内置的异常类,属于Exception的子类。
  • NotImplementedError()是这个类实例化出来的异常对象,自带上下文信息(比如默认错误提示、栈追踪)。

2. 抛出后的行为差异

  • 直接抛NotImplementedError(类):Python虽然允许,但这是不规范的写法。捕获时得针对类来写,而且这类异常没有默认错误消息,栈追踪的可读性也差。举个例子:
    def my_abstract_func():
        raise NotImplementedError
    
  • 抛NotImplementedError()(实例):这是Python异常处理的标准操作。抛出的实例会自带默认提示"NotImplementedError",还能自定义消息让错误更清晰,同时生成完整的栈追踪,方便调试:
    def my_abstract_func():
        raise NotImplementedError("子类必须实现该抽象方法")
    

3. 代码规范层面

PEP 8明确要求抛出异常实例而非类本身。直接抛类的写法不符合通用编码习惯,会让其他开发者觉得不专业。

额外提一句:如果用abc模块的@abstractmethod装饰器定义抽象类,子类没实现抽象方法的话,实例化时会直接报错,不用手动抛异常。但要是手动实现抽象逻辑,就老老实实抛NotImplementedError()。

内容的提问来源于stack exchange,提问作者Quakumei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:52:06