很多小伙伴,在初學(xué)習(xí) Python 的過(guò)程中,遇見(jiàn) BUG 時(shí)便手忙腳亂,不知如何是好,今天小編在這給大家總結(jié)了一些常見(jiàn)的 BUG 類(lèi)型及其應(yīng)對(duì)措施,希望小伙伴們認(rèn)真閱讀做好筆記呢。
錯(cuò)誤類(lèi)型 1:語(yǔ)法錯(cuò)誤
i = 1
while True :
i += 1
if i == 100 :
return
報(bào)錯(cuò):
SyntaxError: 'return' outside function
從代碼中不難看出這位小伙伴是想執(zhí)行一個(gè)循環(huán)體,當(dāng) i 的值等于 100 時(shí)停止計(jì)算并返回,而 return 不能夠再方法以外使用。
解決方法:
i = 1
while True :
i += 1
if i == 100 :
break
錯(cuò)誤類(lèi)型 2:類(lèi)型錯(cuò)誤
name = '老王'
age = 50
print('我是' + name + ',年齡' + age)
報(bào)錯(cuò):
TypeError: must be str, not int
從代碼中可以看出該為小伙伴是想將名字和年齡做一個(gè)組合輸出,但在進(jìn)行 + 拼接時(shí),必須使用字符串,而年齡卻是 int 類(lèi)型。
解決辦法:將 int 類(lèi)型數(shù)據(jù)轉(zhuǎn)成字符串。
name = '老王'
age = 50
print('我是' + name + ',年齡' + str(age))
錯(cuò)誤類(lèi)型 3:語(yǔ)法錯(cuò)誤
name = '老王'
if name = '老王':
print('Hello')
報(bào)錯(cuò):
SyntaxError: invalid syntax
此處看似是在判斷 name 是否為'小王'如果是則輸出 'Hello',但卻忽略了 '=' 符號(hào)是賦值符,'==' 才是比較符。
解決方法:
name = '老王'
if name == '老王':
print('Hello')
錯(cuò)誤類(lèi)型 4:縮進(jìn)錯(cuò)誤
name = '老王'
for index in range(10):
if name == '老王':
print('Hello')
else:
print('No body')
報(bào)錯(cuò):
IndentationError: unindent does not match any outer indentation level
該類(lèi)型報(bào)錯(cuò)較為常見(jiàn),也比較不應(yīng)該,主要還是由于粗心大意而忽視了語(yǔ)法的縮進(jìn)符。
解決方法:使用 4 個(gè)空格代表縮進(jìn),或摁 tab 實(shí)現(xiàn)自動(dòng)縮進(jìn)。
name = '老王'
for index in range(10):
if name == '老王':
print('Hello')
else:
print('No body')
錯(cuò)誤類(lèi)型 5:索引錯(cuò)誤
text = 'hello world'
print(text[11])
報(bào)錯(cuò):
IndexError: string index out of range
該類(lèi)型的錯(cuò)誤為所需提取的字符串超出了范圍,記住字符串下標(biāo)是從 0 開(kāi)始計(jì)數(shù)的,而不是從 1 開(kāi)始,另外字符串內(nèi)的空格也是計(jì)數(shù)的。
錯(cuò)誤類(lèi)型 6:值錯(cuò)誤
text = 'Hello World'
result = text.index('你好')
print(result)
報(bào)錯(cuò):
ValueError: substring not found
該類(lèi)型錯(cuò)誤是用戶(hù)想要在字符串中查找不存在的字符串,查找字符串時(shí)先確認(rèn)原字符串是否有我們需要的子字符串。
錯(cuò)誤類(lèi)型 7:索引錯(cuò)誤
list1 = ['迪迦','賽文','塞羅','艾斯']
print(list1[4])
報(bào)錯(cuò):
IndexError: list index out of range
該用戶(hù)是想取出列表中的最后一個(gè)位置的信息,但取值超出了列表范圍或列表不存在,記住列表的下標(biāo)也是從 0 開(kāi)始計(jì)數(shù)的。
解決辦法:
list1 = ['迪迦','賽文','塞羅','艾斯']
#方法一
print(list1[3])
#方法二
print(list1[-1])
錯(cuò)誤類(lèi)型 8:屬性錯(cuò)誤
tp1 = ('to', 'be', 'or', 'not', 'to', 'be')
tp1.remove('to')
報(bào)錯(cuò):
AttributeError: 'tuple' object has no attribute 'remove'
可以看出用戶(hù)是想將元組的 'to' 信息刪除,然而卻忽略了元組沒(méi)有 remove 方法。
解決方法:將元組轉(zhuǎn)換成列表后進(jìn)行刪除操作。
tp1 = ('to', 'be', 'or', 'not', 'to', 'be')
list1 = list(tp1)
list1.remove('to')
錯(cuò)誤類(lèi)型 9:鍵錯(cuò)誤
dic1 = {
'name':'老王',
'age':50,
'friend':['孫子','孔子','老子','迪迦']
}
print(dic1['height'])
報(bào)錯(cuò):
KeyError: 'height'
key 鍵錯(cuò)誤:沒(méi)有指定的鍵值 'height' ,從用戶(hù)定義的字典不難看出里面并無(wú) 'height' 這個(gè)鍵,而用戶(hù)卻像從中取沒(méi)有的值,不難免報(bào)錯(cuò)了。
錯(cuò)誤類(lèi)型 10:類(lèi)型錯(cuò)誤
dic1 = {
'name':'老王',
'age':50,
'friend':['孫子','孔子','老子','迪迦']
}
dic1.pop()
報(bào)錯(cuò):
TypeError: pop expected at least 1 arguments, got 0
使用 pop() 方法時(shí)至少需要傳入一個(gè)參數(shù),但用戶(hù)并沒(méi)有進(jìn)行傳參操作。
以上便是小編為大家總結(jié)出來(lái)的幾種常見(jiàn) BUG 類(lèi)型,特別對(duì)于初學(xué)者來(lái)說(shuō),應(yīng)該好好琢磨下,如何根據(jù)報(bào)錯(cuò)的類(lèi)型,分析修改完善自己所寫(xiě)的代碼,孰能生巧,只要肯用心,這些 BUG 都不足掛齒?。?!
好課推薦:Python3 入門(mén)、Python3 進(jìn)階