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