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