Python常見(jiàn)報(bào)錯(cuò)及解決方案内边,新手拯救指南

如果說(shuō)寫(xiě)代碼最害怕什么注簿,那無(wú)疑是Bug。而對(duì)于新手來(lái)說(shuō)宅荤,剛剛接觸編程屑迂,在享受寫(xiě)代碼的成就感時(shí),往往也會(huì)被各式各樣的Bug弄得暈頭轉(zhuǎn)向冯键。


微信圖片_20220623095440.jpg

今天惹盼,我們就做了一期Python常見(jiàn)報(bào)錯(cuò)的分享,拯救你的代碼惫确!

01

縮進(jìn)錯(cuò)誤(IndentationError)

在Python中手报,所有代碼都是通過(guò)正確的空格排列的。所以改化,無(wú)論是多出來(lái)空格掩蛤,還是缺少空格,整個(gè)代碼都不會(huì)運(yùn)行陈肛,并且僅返回一個(gè)錯(cuò)誤函數(shù)揍鸟。

Python代碼遵循PEP8空白規(guī)范,每一級(jí)縮進(jìn)使用4個(gè)空格句旱。

錯(cuò)誤示例

<pre data-tool="mdnice編輯器" style="margin: 10px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; visibility: visible;">`a=1
b=2
if a<b:
print a`</pre>

修正

<pre data-tool="mdnice編輯器" style="margin: 10px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`a=1
b=2
if a<b:
    print a`</pre>

02

Tab 和空格混用(TabError)

此類(lèi)報(bào)錯(cuò)是由于同時(shí)使用制表符和空格進(jìn)行編碼導(dǎo)致的阳藻,tab鍵本質(zhì)上是制表符,而非縮進(jìn)符前翎。由于不同文本編輯器中制表符代表的空格寬度不一稚配,建議使用空格。

03

語(yǔ)法錯(cuò)誤(SyntaxError)

語(yǔ)法錯(cuò)誤的原因包含下列三種:

  1. 無(wú)效語(yǔ)法(invalid syntax)

    標(biāo)點(diǎn)符號(hào)遺漏港华,中英文符號(hào)混用,拼寫(xiě)錯(cuò)誤午衰,變量名或者函數(shù)名使用了關(guān)鍵字立宜。

  2. 標(biāo)識(shí)符中有無(wú)效字符(invalid character in identifier)

    代碼中出現(xiàn)了無(wú)法識(shí)別的字符冒萄,檢查一下是否有多余字符或者中文字符。

  3. 檢查到不完整的字符串(EOL while scanning string litera)

很多情況下是由于字符串兩邊的引號(hào)不統(tǒng)一橙数。

錯(cuò)誤示例

<pre data-tool="mdnice編輯器" style="margin: 10px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`print( 'hello'尊流, 'world')`</pre>

錯(cuò)誤原因:逗號(hào)為中文逗號(hào)

報(bào)錯(cuò)信息:SyntaxError: invalid character inidentifier

<pre data-tool="mdnice編輯器" style="margin: 10px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`result = (1024+(512*2)/128`</pre>

錯(cuò)誤原因:圓括號(hào)沒(méi)有成對(duì)出現(xiàn)

報(bào)錯(cuò)信息:SyntaxError:unexpected EOF whileparsing

<pre data-tool="mdnice編輯器" style="margin: 10px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`if name =="A"
print("hello")`</pre>

錯(cuò)誤原因:忘記在if/elif/else/while/for/def/class等語(yǔ)句末尾添加冒號(hào)

報(bào)錯(cuò)信息:SyntaxError:invalid syntax

03

變量名錯(cuò)誤(NameErro)

變量名錯(cuò)誤是最普通也是最常會(huì)遇到的內(nèi)建報(bào)錯(cuò)類(lèi)型,經(jīng)常會(huì)出現(xiàn)在Python變量命名上灯帮,如果找不到變量就會(huì)引發(fā)NameError崖技。關(guān)于變量名的規(guī)則,需要牢記以下幾條:

  • 變量名只能包含字母钟哥、數(shù)字和下劃線(xiàn)迎献,不可用數(shù)字開(kāi)頭;

  • 變量名不能包含空格腻贰,但可使用下劃線(xiàn)來(lái)分隔其中的單詞吁恍;

  • 不要將Python關(guān)鍵字和函數(shù)名用作變量名,如print播演;

  • 變量名應(yīng)既簡(jiǎn)短又具有描述性冀瓦;

  • 慎用小寫(xiě)字母l和大寫(xiě)字母O,因?yàn)槿菀妆诲e(cuò)看成數(shù)字1和0写烤。

出現(xiàn)變量名錯(cuò)誤翼闽,可以查看變量是否賦值,是否存在大小寫(xiě)不統(tǒng)一或者變量名寫(xiě)錯(cuò)了的情況洲炊,找到后加以修正感局。

錯(cuò)誤示例

<pre data-tool="mdnice編輯器" style="margin: 10px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`message = "Hello!"
print(mesage)` </pre>

錯(cuò)誤原因:變量名拼寫(xiě)錯(cuò)誤,誤將massage拼寫(xiě)為masge報(bào)錯(cuò)信息:NameError: name 'mesage' is not defined

05

索引錯(cuò)誤(IndexError)

索引是項(xiàng)目在數(shù)組或列表中的位置选浑,當(dāng)我們嘗試從列表中訪(fǎng)問(wèn)元素或從列表中不存在的索引中訪(fǎng)問(wèn)元組時(shí)蓝厌,就會(huì)發(fā)生這種異常。

例如古徒,有一個(gè)包含10個(gè)元素的列表拓提,索引在0到9之間,如果試圖訪(fǎng)問(wèn)索引10或11或更多的元素隧膘,就會(huì)產(chǎn)生IndexError代态。

錯(cuò)誤示例

<pre data-tool="mdnice編輯器" style="margin: 10px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`a = [1,2,3]
print(a[3])` </pre>

錯(cuò)誤原因:列表a中不存在第4個(gè)索引,列表的索引從0開(kāi)始編號(hào)報(bào)錯(cuò)信息:IndexError: string index out of range

06

鍵錯(cuò)誤(KeyError)

在讀取字典中的key和value時(shí)疹吃,如 果key不存在蹦疑,就會(huì)觸發(fā)KeyError錯(cuò)誤。

錯(cuò)誤示例

<pre data-tool="mdnice編輯器" style="margin: 10px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`d = {'a':1,'b':2}
print(d['f'])`</pre>

錯(cuò)誤原因:鍵‘f’不存在報(bào)錯(cuò)信息:KeyError: 'f'

07

類(lèi)型錯(cuò)誤(TypeError)

在程序中使用不正確或不受支持的對(duì)象類(lèi)型時(shí)萨驶,會(huì)引發(fā)該錯(cuò)誤歉摧。如果嘗試調(diào)用不可調(diào)用的對(duì)象或通過(guò)非迭代標(biāo)識(shí)符進(jìn)行迭代,也會(huì)引發(fā)此錯(cuò)誤。

錯(cuò)誤示例

<pre data-tool="mdnice編輯器" style="margin: 10px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`age=18
print("我的年齡是"+age)`</pre>

錯(cuò)誤原因:在使用“+”做拼接的時(shí)候叁温,必須使用字符串再悼,或者 把數(shù)字用str()函數(shù)轉(zhuǎn)化成字符串 報(bào)錯(cuò)信息:TypeError:can only concatenate str(not"int")to str

08

屬性錯(cuò)誤(AttributeError)

特性引用和賦值失敗時(shí)會(huì)引發(fā)屬性錯(cuò)誤。

此類(lèi)錯(cuò)誤的原因是嘗試訪(fǎng)問(wèn)未知的對(duì)象屬性膝但,換句話(huà)說(shuō)就是找不到對(duì)應(yīng)對(duì)象的屬性冲九。可以檢查類(lèi)中構(gòu)造函數(shù)init()是否寫(xiě)正確跟束,左右兩邊各兩條下劃線(xiàn)莺奸。

對(duì)于初學(xué)的小伙伴來(lái)說(shuō),代碼經(jīng)常出現(xiàn)Bug并不代表著你學(xué)得不好冀宴。若是將一個(gè)個(gè)Bug看作游戲里小怪灭贷,那么消滅Bug的過(guò)程又何嘗不是升級(jí)的過(guò)程呢?

所以花鹅,努力加油吧氧腰!消滅Bug!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市刨肃,隨后出現(xiàn)的幾起案子古拴,更是在濱河造成了極大的恐慌,老刑警劉巖真友,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黄痪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡盔然,警方通過(guò)查閱死者的電腦和手機(jī)桅打,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)愈案,“玉大人挺尾,你說(shuō)我怎么就攤上這事≌拘鳎” “怎么了遭铺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)恢准。 經(jīng)常有香客問(wèn)我魂挂,道長(zhǎng),這世上最難降的妖魔是什么馁筐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任涂召,我火速辦了婚禮,結(jié)果婚禮上敏沉,老公的妹妹穿的比我還像新娘果正。我一直安慰自己炎码,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布舱卡。 她就那樣靜靜地躺著辅肾,像睡著了一般队萤。 火紅的嫁衣襯著肌膚如雪轮锥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天要尔,我揣著相機(jī)與錄音舍杜,去河邊找鬼。 笑死赵辕,一個(gè)胖子當(dāng)著我的面吹牛既绩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播还惠,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼饲握,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蚕键?” 一聲冷哼從身側(cè)響起救欧,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锣光,沒(méi)想到半個(gè)月后笆怠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡誊爹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年蹬刷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片频丘。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡办成,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搂漠,到底是詐尸還是另有隱情迂卢,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布状答,位于F島的核電站冷守,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏惊科。R本人自食惡果不足惜拍摇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望馆截。 院中可真熱鬧充活,春花似錦蜂莉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至幕随,卻和暖如春蚁滋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赘淮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工辕录, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梢卸。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓走诞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蛤高。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚣旱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容