在上面的错误信息中,异常类型是 NameError,意思是名称使用了一个没定义的名称(变量、函数、类)的引用。在本例中,引用的名称是 someon。...这是什么意思呢?...' object has no attribute 'b' AttributeError 的错误消息行告诉我们特定对象类型(在本例中为 int)没有访问的属性, 在这个例子中属性为 b。...这个例子中,在 print 使用了没有定义过的变量 persn 所以出现了错误。 一般在拼写变量名出现问题时会引发这种错误。...然而,它们有细微的不同 第一个是尝试在 int 中拼接一个 str。 第二个是尝试在 str 中拼接一个 int。 错误消息行反映了这些差异。 最后一个示例尝试在 int 上调用 len ()。
迭代器是 23 种设计模式中最常用的一种(之一),在 Python 中随处可见它的身影,我们经常用到它,但是却不一定意识到它的存在。...(PS:Python2 中 range() 生成的是列表,本文基于Python3,生成的是可迭代对象) 于是,我有了这样的疑问:为什么 range() 不生成迭代器呢?...在查找答案的过程中,我发现自己对 range 类型的认识存在一些误区。因此,本文将和大家全面地认识一下 range ,期待与你共同学习进步。 1、range() 是什么?...3、range 类型是什么? 以上是我对“为什么range()不产生迭代器”的一种解答。顺着这个思路,我研究了一下它产生的 range 对象,一研究就发现,这个 range 对象也并不简单。...那 range 序列跟其它序列类型有什么差异呢? 普通序列都支持的操作有 12 种,在《你真的知道Python的字符串是什么吗?》这篇文章里提到过。
因此,要解决我们的问题,首先让我们了解什么是 TypeError? Python 中的 TypeError 是什么? TypeError 是 Python 程序员最常面临的问题之一。...每当您在程序中使用不正确或不受支持的对象类型时,都会引发该错误。 如果尝试调用不可调用的对象或通过非迭代标识符进行迭代,也会引发此错误。例如,如果您尝试使用 "str" 添加 "int" 对象。...c 提供一个 'int' 对象,也可以将变量 a 和 b 的类型转换为 'str' 类型。...Python 方法,在该方案中,将参数字符串编码为另一种所需的编码方案。...: Python 中的 TypeError 是什么?
) # 打印 Python 模块搜索路径错误 5:TypeError(类型不匹配)—— “鸡同鸭讲”,类型不对没法操作TypeError 是 “类型错误”,意思是你对一个数据做了 “它类型不支持的操作...如果违反类型支持的操作,就会报 TypeError。...int'>);函数加类型提示:用 Python 3.5+ 的类型提示,让调用者知道该传什么类型:# 类型提示:a 和 b 是 int,返回值是 intdef add(a: int, b:...int) -> int: return a + b用 isinstance() 判断类型:在函数内加判断,避免传错类型(比如 isinstance(a, int) 检查 a 是否是整数)。...无法访问索引") # 输出这句话避坑技巧:查长度:用 len(对象) 看可索引对象的长度(比如 len(fruits) 知道最大索引是 len (fruits)-1);少用索引遍历:能直接遍历元素就别用索引
环境: python2.7.5 系统:centos 7 x86_64 1.数值类型 1.1整型int 整数有正整数和负整数 在32位机器上,整型的位宽为32位,取值范围为-2147483648~...(2) 序列的基本操作 - 1. len(): 求序列的长度 - 2. +: 连接2个序列 - 3. *: 重复序列元素,乘号后必须是一个数字 - 4. in: 判断元素是否在序列中...,元组内容是一个内容的时候,需要加逗号,不加逗号你输入的内容是什么就是什么。...(index,object) 在索引前插入对象 list.mro(…) 返回类型的方法解析顺序 list.pop([index]) 删除并返回索引处的项(默认为最后一个)。...101]: False In [102]: '123' in list3 Out[102]: True 3.字典{} 字典是python中的唯一的映射类型(哈希表) 字典对象是可变的,但是字典的键必须使用不可变对象
("world") # 字符串没有append方法错误原因上面的代码中,列表对象根本没有length这个属性(列表用len()函数来获取长度),字符串是不可变的,也没有append()方法(这是列表的方法...简单说,就是你想操作的属性或方法在这个对象上根本不存在。解决办法先搞清楚你操作的对象是什么类型,这个类型有哪些属性和方法。...触发场景# 不同类型的数据做运算num = 10 + "20" # 整数和字符串不能直接相加# 函数参数类型不对len(123) # len()函数需要传入可迭代对象,不能传整数# 调用非函数的对象...比如,你不能把数字和字符串直接相加,不能对一个整数用len()函数(因为len()需要处理字符串、列表等可迭代对象)。解决办法先确认你操作的数据类型是什么,然后检查这种操作是否适合这种数据类型。...不过在实际编程中,我们很少直接用next()函数来遍历迭代器,更多的是用for循环,for循环会自动处理迭代器的结束,不会出现这个错误。
谁还不知道 Python 中 None vs NoneType 的真正区别写 Python 代码时,你肯定遇到过这种报错:TypeError: unsupported operand type(s) for...* 2) # 报错:TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'这里的NoneType还是在提醒你:num其实是...而 None 作为 “没有值” 的代表,在多态里也有特殊作用。...,和 “有效但为空” 的空字符串区分开,让多态处理更清晰 —— 这就是 None 在多态中的核心作用:明确标记 “操作失败 / 无结果”,和 “有结果但结果为空” 区分开。...回答:None 是 “没有值”,是 NoneType 的单例对象;0 是整数,"" 是空字符串,它们都是有具体类型的值。
在强类型和弱类型的定义中,强类型语言常常会直接出错或编译失败,而弱类型语言会进行隐式转换或产生意料之外的结果。根据这个定义,Python被归类为强类型语言。...但其实,Python 是一门强类型的动态类型语言,虽然在变量声明时我们不需要显式指定类型,但是“类型”这一概念是实际存在的,举个例子,以下 Python 代码会获得一个 TypeError: >>> 1...在 Python 中尝试以下代码: a = 1 a = "" 显而易见的,这段代码可以正常被运行,但是注意到了吗,a 变量的类型从 int 变为了 str(这同时也佐证了 Python 是一门强类型的语言...提供了 var 关键字让我们可以无须显式指定一个变量的类型,但是该变量类型依然在编译期就会被确定下来;上例 a 变量的类型被推断为 int,因此就不能再被赋值为 java.lang.String 对象...spaces = spaces.len(); // usize 仔细看,这可不是什么动态类型!
在还没有对Distance的实例赋值前, 我们认为meter和foot应该是各自类的实例对象, 但是输出却是数值。...构造自定义容器(Container) 在Python中,常见的容器类型有: dict, tuple, list, string。...如果你希望你的自定义数据结构还支持"可迭代", 那就还需要定义__iter__。 __len__(self) 需要返回数值类型,以表示容器的长度。该方法在可变容器和不可变容器中必须实现。...__hex__(self) 实现了类型转化为十六进制数的行为. __index__(self) 在切片运算中将对象转化为int, 因此该方法的返回值必须是int。用一个例子来解释这个用法。...中的差异 Python3中,str与unicode的区别被废除了,因而__unicode__没有了,取而代之地出现了__bytes__.
Python中的None是一个经常被用到的知识点,但是很多人对于None的内涵把握的还是不够精确,今天就和我一起好好理解下这个小知识点吧。...[] print(a==None) #比较值 print(b==None) print(c==None) print(a is None) False False False False 2.在写代码的过程中...如果说没有区别,那么不管a为何值时,这两个判断语句会返回相同的结果,但事实是这样吗?...对于not a它的意思相当于True,所以会打印出S,而a is None是比较运算,它们不属于同一种类型,因此会出现不一样的打印值。...因为我们都知道,Python中False相当于0,True相当于1,但这里如果我们将False改为0,那么结果会出错,如下 TypeError: __bool__ should return bool,
,以上代码中的 a、b 和 book 三个字符串是三个不同的对象(注意注释(16)的写法,返回值是4.4节要介绍的另外一个 Python 内置对象,它的三个成员分别对应三个对象的内存地址)。...only concatenate str (not "int") to str 符号 + 所连接的对象必须是同种类型的,否则要报错。...这说明 len() 函数不仅仅可以用字符串作为其参数,还能用“容器”作为其参数——“容器”是什么,请参见第5章。 4....注释(20)所标记的表达式也不成立,是因为 'python' 中虽然有 'p' 和 'o' ,但没有 'po' 这个字符串。...成员检测是检测“有没有”,但不回答“在哪里”——'p' 在 'python' 的开头、结尾还是中间?
1、print 变成了 print() 在Python2版本中,print是作为一个语句使用的,在 Python3版本中print。作为一个函数出现。下面通过两段代码来展示两个版本的区别。...这是因为在Python 3中,int和long统一为int类型,int 表示任何精度的整数。...当使用int超过本地整数大小时,不会再导致OverflowError 异常。long类型在Python 3中已经消失,并且后缀L也已经弃用。...而Python 2中原有的str类型,在Python 3中被bytes所代替。...t改为元组个数 整型len(t)类型即可,例如将上述代码中的range(t)改为 range(len(t))。
迭代器 迭代器在 Python 2.2 版本中被加入, 它为类序列对象提供了一个类序列的接口。 Python 的迭代无缝地支持序列对象, 而且它还允许迭代非序列类型, 包括用户定义的对象。...迭代器对象即实现了迭代器协议的对象,在 Python 中,支持迭代器协议就是实现对象的 __iter__() 和 next() 方法(注:在 Python3 中被改为 next 方法)。...以上例子中的 myRange 这个对象就是一个可迭代对象,同时它本身也是一个迭代器对象。对于一个可迭代对象,如果它本身又是一个迭代器对象,就会有这样一个问题,其没有办法支持多次迭代。...yield 被人们优雅的称之为语法糖,意思就是包在里边的甜心。在 yield 的内部是一个状态机,维护着挂起和继续的状态。...: TypeError: object of type 'generator' has no len() 也就是说生成器没有 len() 方法,所以这样并不可行,但是用列表解析则可以用一行实现: return
4, 5, 7] # 在中部拼接 li[6:6] = [6] # [0, 1, 2, 3, 4, 5, 6, 7] # 给切片赋值的必须是可迭代对象 li[-1:-1] = 6 # (报错,TypeError...切片是 Python 中最迷人最强大最 Amazing 的语言特性(几乎没有之一),以上两小节虽然介绍了切片的基础用法与高级用法,但这些还不足以充分地展露切片的魅力,所以,在接下来的两章节中,我们将聚焦于它的更高级用法...3.3、自定义字典实现切片功能 切片是序列类型的特性,所以在上例中,我们不需要写切片的具体实现逻辑。但是,对于其它非序列类型的自定义对象,就得自己实现切片逻辑。...(PS:汉语中迭代一词有循环反复、层层递进的意思,但 Python 中此词要理解成单向水平线性 的,如果你不熟悉它,我建议直接将其理解为遍历。) 那么,怎么写出迭代操作的指令呢?...这句报错中的单词“iterable”指的是“可迭代的”,即 int 类型不是可迭代的。而字符串(string)类型是可迭代的,同样地,列表、元组、字典等类型,都是可迭代的。
1、print 变成了 print() 在Python2版本中,print是作为一个语句使用的,在 Python3版本中print。作为一个函数出现。下面通过两段代码来展示两个版本的区别。...这是因为在Python 3中,int和long统一为int类型,int 表示任何精度的整数。...当使用int超过本地整数大小时,不会再导致OverflowError 异常。long类型在Python 3中已经消失,并且后缀L也已经弃用。...而Python 2中原有的str类型,在Python 3中被bytes所代替。...,在上述代码中,rangeO 函数期望的传入参数是整型(integer),其但是却传入的参为元组(tuple) ,解决方法是将入参元组t改为元组个数 整型len(t)类型即可,例如将上述代码中的range
数值类型 python的数值类型包括整数,浮点数,复数,集合,小数和分数,布尔值。它们都是python中的数值类型。如果是有过其他语言编写经验的人,一定很好奇,浮点数和小数的区别是什么?...整数 python2中整形可以分为一般整形和长整形,但是在python3中,两者以及合二为一了,只有整形。python中的整形是具有无限精度的(只有内存能放下),可以表示任意位数的数字。...由于python2已经停止了支持,本专栏的所有内容将只针对python3。 /:现在python3中的/总是执行真除法,无论操作数的类型是什么。执行结果总是包含小数部分。...在python中几乎是不会用到位运算的。 集合 python中的集合也是数值类型,集合提供了朴素集合论中集合的基本功能。满足确定性,互异性,无序性。...有意思的是python制定了1,0两种情况下的显示,没有定义其余值的显示。所以显示的时候会发生下面的情况。
答:列表的sort()方法是原地排序,没有返回值。在Python中,没有返回值的方法,都认为返回空值None,而空值是没有index()方法的。...12.问:我创建了一个集合,想在里面加入一个列表作为元素,结果提示“TypeError: unhashable type: 'list'”,这是什么意思呢?...答:在Python中,不可哈希(unhashable)和可变的意思是一样的。整数、实数、复数、字符串、元组这些是不可变的,或者说是可哈希的。而列表、字典、集合是可变的,或者说是不可哈希的。...答:列表对象没有add()方法,集合才有add(),仔细检查对象的类型。...16.问:我想删除元组当中的一个元素,提示“TypeError: 'tuple' object doesn't support item deletion”,是什么意思呢?
导致:TypeError: cannot concatenate ‘str’ and ‘int’ objects 字符串与非字符串连接时,必须把非字符串对象强制转换为字符串类型 num_eggs = 12...Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'} print('The name of my pet zebra is ' + spam['zebra']) 在字典对象中访问...因此,在 myFunction 函数中 someVar 被定义了,所以 print(someVar) 就不再外面查找了,但是 print 的时候该变量还没赋值,所以出现了 UnboundLocalError...11、使用自增 “++” 自减 “—” spam = 0 spam++ 哈哈,Python 中没有自增自减操作符,如果你是从C、Java转过来的话,你可要注意了。...正确的调用方式应该是 Foo.method1()。 需要注意的是,以上代码都是基于 Python3 的,在 Python2 中即使是同样的代码出现的错误也不尽一样,尤其是最后一个例子。
(chars, key=len) ['a', 'is', 'from', 'test', 'This', 'Andrew', 'string'] len 是内建函数,sorted 函数在排序的时候会用len...of 'str' and 'int' 一个整数列表中,可能有数字,字符串,在Python3中,字符串与数值是不能比较的,而Python2中任何类型都可以比较,这是两个版本中一个很大的区别: # python2.7...' and 'int' 我们需要使用 functools 模块中的 cmp_to_key 来指定比较函数是什么。...和Python3之间的区别是Python2中的sorted 可以指定cmp关键字参数,就是当遇到需要自定义比较操作的数据可以通过 cmp=compare 来实现,不需要像Python3中还需要导入functools.cmp_to_key...中,上面这种情况你不指定cmp,默认也会按照这种方式排序,记住,Python2中,任何东西(不同类型之间)都可以比较,而Python3只有同类型数据可以比较。