TypeErrors
当某些对象的类型应该不同时,会导致这些异常
TypeError:[定义/方法]需要?位置论证但是?得到了
使用比它可以接受的参数更多(或更少)的参数调用函数或方法。
例
如果给出更多的论据:
def foo(a): return a
foo(a,b,c,d) #And a,b,c,d are defined
如果给出的参数较少:
def foo(a,b,c,d): return a += b + c + d
foo(a) #And a is defined
注意 :如果要使用未知数量的参数,可以使用*args
或**kwargs
。见 * args 和** kwargs
TypeError:[操作数]不支持的操作数类型:’???’ 和’???'
某些类型不能一起操作,具体取决于操作数。
例
例如:+
用于连接和添加,但你不能将它们中的任何一个用于这两种类型。例如,试图通过连接(+
ing)'set1'
和'tuple1'
来制作一个 set
会产生错误。码:
set1, tuple1 = {1,2}, (3,4)
a = set1 + tuple1
有些类型(例如:int
和 string
)同时使用+
但是用于不同的东西:
b = 400 + 'foo'
或者他们可能甚至不用于任何事情:
c = ["a","b"] - [1,2]
但你可以举一个 float
到 int
:
d = 1 + 1.0
TypeError:’???’ object 不可迭代/可订阅:
对于一个可迭代的对象,它可以采用从零开始的顺序索引,直到索引不再有效并且引发 IndexError
(更技术上:它必须有一个返回 __iterator__
的 __iter__
方法,或者定义了一个 __getitem__
方法之前提到过的)。
例
在这里我们说 bar
是第 1 项的废话:废话:
foo = 1
bar = foo[0]
这是一个更离散的版本:在这个示例中,for
尝试将 x
设置为 amount[0]
,这是可迭代中的第一项,但它不能,因为 amount 是一个 int:
amount = 10
for x in amount: print(x)
TypeError:’???’ 对象不可调用
你正在定义一个变量并稍后调用它(就像你使用函数或方法所做的那样)
例
foo = "notAFunction"
foo()