Python数据类型判断常遇到的坑
python判断变量数据类型时,建议使用isinstance()方法代替type(). 进行类型检查首先想到的就是用type(),但是Type在某些特定情况下判断类型存在问题,今天就来说下type在python类型判断时的坑。
type()方法
例子: int类型判断
>>> import types
>>> type(2017)==types.IntType
True
Python2.7中的types类型:
types.BooleanType # bool类型
types.BufferType # buffer类型
types.BuiltinFunctionType # 内建函数,比如len()
types.BuiltinMethodType # 内建方法,指的是类中的方法
types.ClassType # 类类型
types.CodeType # 代码块类型
types.ComplexType # 复数类型
types.DictProxyType # 字典代理类型
types.DictType # 字典类型
types.DictionaryType # 字典备用的类型
types.EllipsisType
types.FileType # 文件类型
types.FloatType # 浮点类型
types.FrameType
types.FunctionType # 函数类型
types.GeneratorType
types.GetSetDescriptorType
types.InstanceType # 实例类型
types.IntType # int类型
types.LambdaType # lambda类型
types.ListType # 列表类型
types.LongType # long类型
types.MemberDescriptorType
types.MethodType # 方法类型
types.ModuleType # module类型
types.NoneType # None类型
types.NotImplementedType
types.ObjectType # object类型
types.SliceTypeh
types.StringType # 字符串类型
types.StringTypes
types.TracebackType
types.TupleType # 元组类型
types.TypeType # 类型本身
types.UnboundMethodType
types.UnicodeType
types.XRangeType
Python3.x中的types类型:
types.BuiltinFunctionType
types.BuiltinMethodType
types.CodeType
types.DynamicClassAttribute
types.FrameType
types.FunctionType
types.GeneratorType
types.GetSetDescriptorType
types.LambdaType
types.MappingProxyType
types.MemberDescriptorType
types.MethodType
types.ModuleType
types.SimpleNamespace
types.TracebackType
types.new_class
types.prepare_class
Python3.x进行了类型的精简
isinstance方法
isinstance(object, classinfo)
object表示实例,classinfo可以是直接或间接类名、基本类型或者有它们组成的元组。
基本用法
>>> isinstance(1, int)
True
>>>
>>> isinstance('pythontab.com', (str, int)) # 是其中一种即可
True
>>> isinstance(100, (str, int)) # 是其中一种即可
True
上面type的例子可以表示为:
>>> import types
>>> isinstance(2017,int)
True
那为什么不推荐使用type进行类型检查呢?
我们来看一下下面的例子。
import types
class UserInt(int):def __init__(self, val=0):self.val = int(val)
i = 1
n = UserInt(2)
print(type(i) is type(n))
上面的代码输出:False
这就说明i和n的类型是不一样的,而实际上UserInt是继承自int的,所以这个判断是存在问题的,当我们对Python内建类型进行扩展的时候,type返回的结果就不够准确了。我们再看一个例子。
class ca:pass
class cb:pass
a = ca()
b = cb()
print (type(a) is type(b))
代码的输出结果: True
注意: 这个例子仅仅针对Python2.x版本, Python3.x版本中会返回Flase,不存在该问题
type比较的结果a和b的类型是一样的,结果明显是不准确的。在old-style class中,任意instance的type都是’instance’。所以绝对不能用type来判断其类型。
另外这个问题又与Python的思想有关,正常情况下不应该编写代码检查类型的,而应该直接假设被操作的instance具有你希望的属性,否则抛出异常。即使需要检查类型,也应该用isinstance来判断,这样你期望类型的subclass也能正常被处理(比如,一个函数需要处理Message类型,那么它应该也能处理Message的子类型MyMessage,所以应该使用isinstance(arg,Message)这样来判断而不是type(arg) == Message来判断)
结论:
尽量不要使用type()方法,多使用isinstance(),这样可以减少错误。
Python数据类型判断常遇到的坑相关推荐
- python中判断列表数据类型_浅谈Python数据类型判断及列表脚本操作
数据类型判断 在python(版本3.0以上)使用变量,并进行值比较时.有时候会出现以下错误: TypeError: unorderable types: NoneType() < int() ...
- python列表使用判断_浅谈Python数据类型判断及列表脚本操作
数据类型判断 在python(版本3.0以上)使用变量,并进行值比较时.有时候会出现以下错误: TypeError: unorderable types: NoneType() < int() ...
- Python 数据类型判断
Python 数据类型判断 对于一个整数型数据 ndarray类型判断 不知道大家有没有过和我一样的困惑,就是不知道该如何判断一个数据的类型.比如整数类型以及ndarray类型.这里介绍两种方法来实现 ...
- set集合判断集合中是否有无元素_集合 (Set) | 一山不容二虎的 Python 数据类型
点击上方"可乐python说"关注公众号,点击右上角 "..."选择"设为星标"第一时间获取最新分享! 前言 Hi,大家好,我是可乐, 今天 ...
- python判断正确的是_Python输入数据类型判断正确与否的函数大全(非常全)
对于python输入数据类型判断正确与否的函数大致有三类: (1)type(),它的作用直接可以判断出数据的类型 (2)isinstance(),它可以判断任何一个数据与相应的数据类型是否一致,比较常 ...
- 1008day1:列表-字符串基础知识、正则提取字符串小数、python数据类型、判断为假的方法、格式判断if elif elif else、字符串遍、计算器、提取str字母、斐波那契数列、水仙花数
文章目录 一.提取字符串里面的小数:正则 二.Python数据类型 三.== 字符串:str基础知识 == 四.整型及浮点型 五.判断为假的方法 六.判断格式 七.循环:字符串遍历 六.循环1~100 ...
- Python中数据类型判断type()方法
[小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python中数据类型判断 type()方法 [太阳]选择题 以下python代码输出什么? ...
- python怎么判断数据类型,python怎么判断数据类型
python怎么判断数据类型,变量,类型,参数,字符串,字典 python怎么判断数据类型 易采站长站,站长之家为您整理了python怎么判断数据类型的相关内容. python的数据类型有:数字(in ...
- python如何判断类型数据_python如何判断数据类型
详细内容 python如何判断数据类型? 在python中可以使用isinstance()函数来判断数据类型,isinstance()函数来判断一个对象是否是一个已知的类型,类似 type(). 推荐 ...
最新文章
- 知识图谱如何助力文本摘要生成
- 《Python核心编程》第二版第36页第二章练习 -Python核心编程答案-自己做的-
- c++11中的智能指针
- 七国要求科技巨头预留后门 应对马甲芯片高度警惕
- this.$router.push如何刷新页面_小程序丨微信小程序如何实现页面下拉刷新
- 解决ubuntu中vi不能正常使用方向键与退格键的问题 - 部分按键无法正常使用 按键乱码...
- 力扣——字符串转换整数(atoi)
- linux文件的三个主要的修改时间
- 操作系统概念学习笔记 4 操作系统结构和操作简述
- 项目管理之成熟度模型
- 空气质量监测管理系统
- linux开机不运行桌面快捷方式,Android 开机自动运行和添加删除桌面快捷方式
- 拼图c语言程序,C语言实现拼图小游戏
- pythontrun什么意思_python新手笔记一
- Android 面试必备 - 线程
- mysql使用()文件中的配置参数_MySQL使用( )文件中的配置参数。 答案:my.ini
- Python Flask框架-开发简单博客-项目布局、应用设置
- [Pytorch图像分类全流程实战]Task06:可解释性分析
- java中的“回车”与“换行”
- 写给新手的DMOZ网站提交注意事项