[Python] NotImplemented 和 NotImplementedError 区别
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 区别相关推荐
- Python 2.x 与 Python 3.x 的区别
前言 如果你是刚接触 Python 的初学者,那你可能是直接学习 Python 3.x 版本.对于 Python 2.x 的版本是不会有所接触.官方也宣布在 2020 停止对 Python 2.x 的 ...
- python工程师是什么专业-猎维科技告诉你人工智能工程师与Python工程师有什么区别?...
学习Python就等于学习人工智能吗?当然不!千万不要混淆它们的概念!Python工程师并不等同于人工智能工程师.(关注公众号"猎维人工智能") Python工程师与人工智能工程师 ...
- php和python区别-PHP与Python语言有哪些区别之处?选择哪一个好?
其实针对不同阶段的学者来说,他们的需求自然也有所不同.本篇文章主要分析了php和python哪个好以及介绍PHP与Python的区别之处,希望对还在为学习PHP和Python中哪一个语言而摇摆不定的朋 ...
- java和python的web自动化有什么区别-三分钟看懂Python和Java的区别
随着人工智能的火爆,Python和Java一直在各种流行编程语言中名列前茅.其实Java和Python有些相似,因为很多编程语言之间是互通的.Java现在还是第一,不知道Python未来会不会超越Ja ...
- c+和python的区别-c语言和python之间有什么区别
c语言和python的区别是:1.Python是一种面向对象的解释型语言,通过缩进来表示语句体,在Python中每一条语句结尾后没有分号:2.C是一种面向过程的编译型语言,通过"{}&quo ...
- python和java一样吗-三分钟看懂Python和Java的区别
随着人工智能的火爆,Python和Java一直在各种流行编程语言中名列前茅.其实Java和Python有些相似,因为很多编程语言之间是互通的.Java现在还是第一,不知道Python未来会不会超越Ja ...
- python和java一样吗-python和java的区别,看了这个就会区分了!
翻看日历,2019年结束也就剩下3个月的时间了!时光飞逝,伴随着互联网人工智能时代的发展,人类一直在预测,2020年什么技术会火?其中,人工智能编程成了大家讨论的热点,Python.Java一直被人们 ...
- python错误-python异常与错误区别
错误和异常概念 错误: 1.语法错误:代码不符合解释器或者编译器语法 2.逻辑错误:不完整或者不合法输入或者计算出现问题 异常:执行过程中出现万体导致程序无法执行 1.程序遇到逻辑或者算法问题 2.运 ...
- python学习-综合练习三(斐波那契数列、阿姆斯特朗数、//和/、十进制转二进制bin、八进制oct、十六进制hex、进制转换源码、python中::和:的区别)
文章目录 斐波那契数列 阿姆斯特朗数 十进制转二进制bin.八进制oct.十六进制hex 补充进制转换源码 python中::和:的区别 说明:本篇博文的知识点大部分来自 Python3 实例 斐波那 ...
最新文章
- 常用memcached命令详解
- 只要一句话、一段文字,想让奥巴马说啥他就说啥
- DiracNetV2
- Linux 系统如何更改主机名
- python编写请求参数带文件_python:解析httppost请求,其中包含文件上传和其他参数...
- 如何:让Oracle表及字段显示为区分大小写
- PLCrashReporter使用
- 2022年PMP考试模拟题1(含答案解析)
- python调用win32api详解_Python调用Win32 API实现截图
- java数字转为大写_Java 将数字金额转成中文大写
- android的sd卡分区,超强Android系统SD卡分区教程!
- 计算机机械硬盘系统安装,电脑硬盘安装图解,机械硬盘安装-
- Espresso:自定义Idling Resource
- 彻底卸载mac软件的方法,这样才删除干净哦
- Word在方框中插入对勾和×
- 判断类型是否继承_读《Java核心技术》-继承(覆盖、final、强制类型转换、抽象类)...
- 什么!FPS难道不是越高越好吗?
- C++写一个CSGO开箱模拟器
- 数据结构(数组结构、链表结构)
- linux7.5开放端口,Centos/linux开放端口