App下載

Python常見BUG類型

猿友 2020-12-23 15:29:09 瀏覽數(shù) (3616)
反饋

很多小伙伴,在初學(xué)習(xí) Python 的過程中,遇見 BUG 時(shí)便手忙腳亂,不知如何是好,今天小編在這給大家總結(jié)了一些常見的 BUG 類型及其應(yīng)對(duì)措施,希望小伙伴們認(rèn)真閱讀做好筆記呢。


錯(cuò)誤類型 1:語法錯(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ò)誤類型 2:類型錯(cuò)誤

 name = '老王'

 age = 50

 print('我是' + name + ',年齡' + age)

報(bào)錯(cuò):

TypeError: must be str, not int

從代碼中可以看出該為小伙伴是想將名字和年齡做一個(gè)組合輸出,但在進(jìn)行 + 拼接時(shí),必須使用字符串,而年齡卻是 int 類型。

解決辦法:將 int 類型數(shù)據(jù)轉(zhuǎn)成字符串。

name = '老王'

age = 50

print('我是' + name + ',年齡' + str(age))


錯(cuò)誤類型 3:語法錯(cuò)誤

name = '老王'

if name = '老王':

    print('Hello')

報(bào)錯(cuò):

SyntaxError: invalid syntax

此處看似是在判斷 name 是否為'小王'如果是則輸出  'Hello',但卻忽略了 '=' 符號(hào)是賦值符,'==' 才是比較符。

解決方法:

name = '老王'

if name == '老王':

    print('Hello')


錯(cuò)誤類型 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

該類型報(bào)錯(cuò)較為常見,也比較不應(yīng)該,主要還是由于粗心大意而忽視了語法的縮進(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ò)誤類型 5:索引錯(cuò)誤

 text = 'hello world'

 print(text[11])

報(bào)錯(cuò): 

IndexError: string index out of range

該類型的錯(cuò)誤為所需提取的字符串超出了范圍,記住字符串下標(biāo)是從 0 開始計(jì)數(shù)的,而不是從 1 開始,另外字符串內(nèi)的空格也是計(jì)數(shù)的。


錯(cuò)誤類型 6:值錯(cuò)誤

text = 'Hello World'

result = text.index('你好')

print(result)

報(bào)錯(cuò): 

ValueError: substring not found

該類型錯(cuò)誤是用戶想要在字符串中查找不存在的字符串,查找字符串時(shí)先確認(rèn)原字符串是否有我們需要的子字符串。


錯(cuò)誤類型 7:索引錯(cuò)誤

list1 = ['迪迦','賽文','塞羅','艾斯']

print(list1[4])

報(bào)錯(cuò):

IndexError: list index out of range

該用戶是想取出列表中的最后一個(gè)位置的信息,但取值超出了列表范圍或列表不存在,記住列表的下標(biāo)也是從 0 開始計(jì)數(shù)的。

解決辦法:

list1 = ['迪迦','賽文','塞羅','艾斯']

#方法一

print(list1[3])

#方法二

print(list1[-1])


錯(cuò)誤類型 8:屬性錯(cuò)誤

tp1 = ('to', 'be', 'or', 'not', 'to', 'be')

tp1.remove('to')

報(bào)錯(cuò):

AttributeError: 'tuple' object has no attribute 'remove'

可以看出用戶是想將元組的 'to' 信息刪除,然而卻忽略了元組沒有 remove 方法。

解決方法:將元組轉(zhuǎn)換成列表后進(jìn)行刪除操作。

tp1 = ('to', 'be', 'or', 'not', 'to', 'be')

list1 = list(tp1)

list1.remove('to')


錯(cuò)誤類型 9:鍵錯(cuò)誤

 dic1 = {

    'name':'老王',

    'age':50,

    'friend':['孫子','孔子','老子','迪迦']

}

print(dic1['height'])

報(bào)錯(cuò):

KeyError: 'height'

key 鍵錯(cuò)誤:沒有指定的鍵值 'height' ,從用戶定義的字典不難看出里面并無 'height' 這個(gè)鍵,而用戶卻像從中取沒有的值,不難免報(bào)錯(cuò)了。


錯(cuò)誤類型 10:類型錯(cuò)誤

dic1 = { 

    'name':'老王',

    'age':50,

    'friend':['孫子','孔子','老子','迪迦']

}

dic1.pop()

報(bào)錯(cuò):

TypeError: pop expected at least 1 arguments, got 0

使用 pop() 方法時(shí)至少需要傳入一個(gè)參數(shù),但用戶并沒有進(jìn)行傳參操作。


以上便是小編為大家總結(jié)出來的幾種常見 BUG 類型,特別對(duì)于初學(xué)者來說,應(yīng)該好好琢磨下,如何根據(jù)報(bào)錯(cuò)的類型,分析修改完善自己所寫的代碼,孰能生巧,只要肯用心,這些 BUG 都不足掛齒?。?!

好課推薦:Python3 入門、Python3 進(jìn)階


0 人點(diǎn)贊