NotImplemented 是一个非异常对象,NotImplementedError 是一个异常对象。

>>> NotImplemented
NotImplemented
>>> NotImplementedError
<type 'exceptions.NotImplementedError'>>>> type(NotImplemented)
<type 'NotImplementedType'>
>>> type(NotImplementedError)
<type 'type'>

  如果抛出 NotImplemented 会得到 TypeError,因为它不是一个异常。而抛出 NotImplementedError 会正常捕获该异常。

>>> raise NotImplementedTraceback (most recent call last):File "<pyshell#10>", line 1, in <module>raise NotImplemented
TypeError: exceptions must be old-style classes or derived from BaseException, not NotImplementedType>>> raise NotImplementedErrorTraceback (most recent call last):File "<pyshell#11>", line 1, in <module>raise NotImplementedError
NotImplementedError

为什么要存在一个 NotImplemented 和一个 NotImplementedError 呢?

  

  在 Python 中对列表进行排序时,会经常间接使用像 __lt__() 这类比较运算的方法。

  有时 Python 的内部算法会选择别的方法来确定比较结果,或者直接选择一个默认的结果。如果抛出一个异常,则会打破排序运算,因此如果使用 NotImplemented 则不会抛出异常,这样 Python 可以尝试别的方法。

  NotImplemented 对象向运行时环境发出一个信号,告诉运行环境如果当前操作失败,它应该再检查一下其他可行方法。例如在 a == b 表达式,如果 a.__eq__(b) 返回 NotImplemented,那么 Python 会尝试 b.__eq__(a)。如果调用 b 的 __eq__() 方法可以返回 True 或者 False,那么该表达式就成功了。如果 b.__eq__(a) 也不能得出结果,那么 Python 会继续尝试其他方法,例如使用 != 来比较。  

参考一

转载于:https://www.cnblogs.com/ifantastic/p/3682268.html

[Python] NotImplemented 和 NotImplementedError 区别相关推荐

  1. Python 2.x 与 Python 3.x 的区别

    前言 如果你是刚接触 Python 的初学者,那你可能是直接学习 Python 3.x 版本.对于 Python 2.x 的版本是不会有所接触.官方也宣布在 2020 停止对 Python 2.x 的 ...

  2. python工程师是什么专业-猎维科技告诉你人工智能工程师与Python工程师有什么区别?...

    学习Python就等于学习人工智能吗?当然不!千万不要混淆它们的概念!Python工程师并不等同于人工智能工程师.(关注公众号"猎维人工智能") Python工程师与人工智能工程师 ...

  3. php和python区别-PHP与Python语言有哪些区别之处?选择哪一个好?

    其实针对不同阶段的学者来说,他们的需求自然也有所不同.本篇文章主要分析了php和python哪个好以及介绍PHP与Python的区别之处,希望对还在为学习PHP和Python中哪一个语言而摇摆不定的朋 ...

  4. java和python的web自动化有什么区别-三分钟看懂Python和Java的区别

    随着人工智能的火爆,Python和Java一直在各种流行编程语言中名列前茅.其实Java和Python有些相似,因为很多编程语言之间是互通的.Java现在还是第一,不知道Python未来会不会超越Ja ...

  5. c+和python的区别-c语言和python之间有什么区别

    c语言和python的区别是:1.Python是一种面向对象的解释型语言,通过缩进来表示语句体,在Python中每一条语句结尾后没有分号:2.C是一种面向过程的编译型语言,通过"{}&quo ...

  6. python和java一样吗-三分钟看懂Python和Java的区别

    随着人工智能的火爆,Python和Java一直在各种流行编程语言中名列前茅.其实Java和Python有些相似,因为很多编程语言之间是互通的.Java现在还是第一,不知道Python未来会不会超越Ja ...

  7. python和java一样吗-python和java的区别,看了这个就会区分了!

    翻看日历,2019年结束也就剩下3个月的时间了!时光飞逝,伴随着互联网人工智能时代的发展,人类一直在预测,2020年什么技术会火?其中,人工智能编程成了大家讨论的热点,Python.Java一直被人们 ...

  8. python错误-python异常与错误区别

    错误和异常概念 错误: 1.语法错误:代码不符合解释器或者编译器语法 2.逻辑错误:不完整或者不合法输入或者计算出现问题 异常:执行过程中出现万体导致程序无法执行 1.程序遇到逻辑或者算法问题 2.运 ...

  9. python学习-综合练习三(斐波那契数列、阿姆斯特朗数、//和/、十进制转二进制bin、八进制oct、十六进制hex、进制转换源码、python中::和:的区别)

    文章目录 斐波那契数列 阿姆斯特朗数 十进制转二进制bin.八进制oct.十六进制hex 补充进制转换源码 python中::和:的区别 说明:本篇博文的知识点大部分来自 Python3 实例 斐波那 ...

最新文章

  1. 常用memcached命令详解
  2. 只要一句话、一段文字,想让奥巴马说啥他就说啥
  3. DiracNetV2
  4. Linux 系统如何更改主机名
  5. python编写请求参数带文件_python:解析httppost请求,其中包含文件上传和其他参数...
  6. 如何:让Oracle表及字段显示为区分大小写
  7. PLCrashReporter使用
  8. 2022年PMP考试模拟题1(含答案解析)
  9. python调用win32api详解_Python调用Win32 API实现截图
  10. java数字转为大写_Java 将数字金额转成中文大写
  11. android的sd卡分区,超强Android系统SD卡分区教程!
  12. 计算机机械硬盘系统安装,电脑硬盘安装图解,机械硬盘安装-
  13. Espresso:自定义Idling Resource
  14. 彻底卸载mac软件的方法,这样才删除干净哦
  15. Word在方框中插入对勾和×
  16. 判断类型是否继承_读《Java核心技术》-继承(覆盖、final、强制类型转换、抽象类)...
  17. 什么!FPS难道不是越高越好吗?
  18. C++写一个CSGO开箱模拟器
  19. 数据结构(数组结构、链表结构)
  20. linux7.5开放端口,Centos/linux开放端口

热门文章

  1. 书摘:35岁之前成功的12条黄金法则
  2. 初识react(二) 实现一个简版的html+redux.js的demo
  3. shell脚本中用到的条件和循环语句
  4. Redis数据类型:字符串
  5. Nginx+PHP实时生成不同尺寸图片
  6. RS 学习笔记 3-1
  7. 加强型的记录集权限(数据集权限、约束表达式设置功能)实现方法界面参考...
  8. Windows 7 :微软目前最好的操作系统
  9. 例用C# 变更文件夹时间
  10. python 多线程--重点知识