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