定义抽象方法时: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
相关产品推荐
相关产品推荐

