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

有些类型(例如:intstring)同时使用+但是用于不同的东西:

b = 400 + 'foo'

或者他们可能甚至不用于任何事情:

c = ["a","b"] - [1,2]

但你可以举一个 floatint

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()