新手必看横辆,17 個(gè)常見(jiàn)的 Python 運(yùn)行時(shí)錯(cuò)誤

初入門(mén)的 Pythoner 在運(yùn)行代碼時(shí)免不了會(huì)遇到一些錯(cuò)誤,剛開(kāi)始可能看起來(lái)比較費(fèi)勁茄猫。
隨著代碼量的積累狈蚤,熟能生巧,當(dāng)遇到一些運(yùn)行時(shí)錯(cuò)誤時(shí)能夠很快的定位問(wèn)題原題划纽。
下面整理了常見(jiàn)的 17 個(gè)錯(cuò)誤脆侮,希望能夠幫助到大家。

1勇劣、忘記在 if靖避,for,def比默,elif幻捏,else,class 等聲明末尾加 :會(huì)導(dǎo)致SyntaxError
invalid syntax如下:

if spam == 42
  print( Hello! )

2命咐、使用= 而不是 ==也會(huì)導(dǎo)致SyntaxError: invalid syntax= 是賦值操作符篡九,而 == 是等于比較操作,該錯(cuò)誤發(fā)生在如下代碼中:

if spam = 42:
   print( Hello! )

3醋奠、錯(cuò)誤的使用縮進(jìn)量導(dǎo)致

IndentationError:unexpected indent
IndentationError:unindent does not match any outer indetation level
以及IndentationError:expected an indented block

記住縮進(jìn)增加只用在以:結(jié)束的語(yǔ)句之后榛臼,而之后必須恢復(fù)到之前的縮進(jìn)格式。
該錯(cuò)誤發(fā)生在如下代碼中:

print( Hello! )
   print( Howdy! )

或者:

if spam == 42:
    print( Hello! )
print( Howdy! )

4窜司、在 for 循環(huán)語(yǔ)句中忘記調(diào)用 len()

導(dǎo)致TypeError: list object cannot be interpreted as an integer通常你想要通過(guò)索引來(lái)迭代一個(gè) list 或者 string 的元素沛善,這需要調(diào)用 range() 函數(shù)。

要記得返回 len 值而不是返回這個(gè)列表塞祈。

該錯(cuò)誤發(fā)生在如下代碼中:

spam = [ cat ,  dog ,  mouse ]
for i in range(spam):
    print(spam[i])

5金刁、嘗試修改 string 的值

導(dǎo)致TypeError: str object does not support item assignmentstring 是一種不可變的數(shù)據(jù)類型,該錯(cuò)誤發(fā)生在如下代碼中:

spam =  I have a pet cat.
spam[13] =  r
print(spam)

而正確做法是:

spam =  I have a pet cat.
spam = spam[:13] +  r  + spam[14:]
print(spam)

6、嘗試連接非字符串值與字符串

導(dǎo)致 TypeError: Can t convert int object to str implicitly尤蛮,該錯(cuò)誤發(fā)生在如下代碼中:

numEggs = 12
print( I have   + numEggs +   eggs. )

而正確做法是:


numEggs = 12
print( I have   + str(numEggs) +   eggs. )
numEggs = 12
print( I have %s eggs.  % (numEggs))

7漠秋、在字符串首尾忘記加引號(hào)

導(dǎo)致SyntaxError: EOL while scanning string literal

該錯(cuò)誤發(fā)生在如下代碼中:

print(Hello! )
print( Hello!)
myName =  Al
print( My name is   + myName + . How are you? )

8、變量或者函數(shù)名拼寫(xiě)錯(cuò)誤

導(dǎo)致NameError: name fooba is not defined
該錯(cuò)誤發(fā)生在如下代碼中:

foobar =  Al
print( My name is   + fooba)

spam = ruond(4.2)
spam = Round(4.2)

9抵屿、方法名拼寫(xiě)錯(cuò)誤
導(dǎo)致 AttributeError: str object has no attribute lowerr
該錯(cuò)誤發(fā)生在如下代碼中:

spam =  THIS IS IN LOWERCASE.
spam = spam.lowerr()

10庆锦、引用超過(guò) list 最大索引

導(dǎo)致 IndexError: list index out of range
該錯(cuò)誤發(fā)生在如下代碼中:

spam = [ cat ,  dog ,  mouse ]
print(spam[6])

11、使用不存在的字典鍵值

導(dǎo)致KeyError:‘spam’
該錯(cuò)誤發(fā)生在如下代碼中:

spam = { cat :  Zophie ,  dog :  Basil ,  mouse :  Whiskers }
print( The name of my pet zebra is   + spam[ zebra ])

12轧葛、嘗試使用 Python 關(guān)鍵字作為變量名

導(dǎo)致SyntaxError:invalid syntax
Python 關(guān)鍵不能用作變量名搂抒,該錯(cuò)誤發(fā)生在如下代碼中:

class =  algebra

Python3 的關(guān)鍵字有:

and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield

13、在一個(gè)定義新變量中使用增值操作符

導(dǎo)致NameError: name foobar is not defined

不要在聲明變量時(shí)使用 0 或者空字符串作為初始值尿扯,這樣使用自增操作符的一句spam += 1等于spam = spam + 1求晶,這意味著 spam 需要指定一個(gè)有效的初始值。

該錯(cuò)誤發(fā)生在如下代碼中:

spam = 0
spam += 42
eggs += 42

14衷笋、在定義局部變量前在函數(shù)中使用局部變量(此時(shí)有與局部變量同名的全局變量存在)

導(dǎo)致UnboundLocalError: local variable foobar referenced before assignment
在函數(shù)中使用局部變量而同時(shí)又存在同名全局變量時(shí)是很復(fù)雜的芳杏,使用規(guī)則是:
如果在函數(shù)中定義了任何東西,如果它只是在函數(shù)中使用那它就是局部的辟宗,反之就是全局變量爵赵。
這意味著你不能在定義它之前把它當(dāng)全局變量在函數(shù)中使用。
該錯(cuò)誤發(fā)生在如下代碼中:

someVar = 42
def myFunction():
    print(someVar)
    someVar = 100
myFunction()

15泊脐、嘗試使用 range()創(chuàng)建整數(shù)列表

導(dǎo)致TypeError: range object does not support item assignment
有時(shí)你想要得到一個(gè)有序的整數(shù)列表空幻,所以 range() 看上去是生成此列表的不錯(cuò)方式。然而容客,你需要記住 range()返回的是range object秕铛,而不是實(shí)際的 list 值。

該錯(cuò)誤發(fā)生在如下代碼中:

spam = range(10)
spam[4] = -1

正確寫(xiě)法:

spam = list(range(10))
spam[4] = -1

注意:在 Python 2spam = range(10)是能行的缩挑,因?yàn)樵?Python 2range()返回的是list值但两,但是在 Python 3 中就會(huì)產(chǎn)生以上錯(cuò)誤.

16、不存在 ++ 或者 -- 自增自減操作符

導(dǎo)致SyntaxError: invalid syntax
如果你習(xí)慣于例如 C++ , Java , PHP 等其他的語(yǔ)言供置,也許你會(huì)想要嘗試使用++或者 -- 自增自減一個(gè)變量谨湘。
Python 中是沒(méi)有這樣的操作符的。
該錯(cuò)誤發(fā)生在如下代碼中:

spam = 1
spam++

正確寫(xiě)法:

spam = 1
spam += 1

17士袄、忘記為方法的第一個(gè)參數(shù)添加 self 參數(shù)

導(dǎo)致TypeError: myMethod() takes no arguments (1 given)
該錯(cuò)誤發(fā)生在如下代碼中:

class Foo():
    def myMethod():
        print( Hello! )
a = Foo()
a.myMethod()

推薦 :

申請(qǐng)即送:

  • Python軟件安裝包挎挖,Python實(shí)戰(zhàn)教程
  • 資料免費(fèi)領(lǐng)取这敬,包括 Python基礎(chǔ)學(xué)習(xí)、進(jìn)階學(xué)習(xí)蕉朵、爬蟲(chóng)崔涂、人工智能、自動(dòng)化運(yùn)維始衅、自動(dòng)化測(cè)試等
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冷蚂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子汛闸,更是在濱河造成了極大的恐慌蝙茶,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,207評(píng)論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诸老,死亡現(xiàn)場(chǎng)離奇詭異隆夯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)别伏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門(mén)蹄衷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人厘肮,你說(shuō)我怎么就攤上這事宦芦。” “怎么了轴脐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 170,031評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵调卑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我大咱,道長(zhǎng)恬涧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,334評(píng)論 1 300
  • 正文 為了忘掉前任碴巾,我火速辦了婚禮溯捆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厦瓢。我一直安慰自己提揍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,322評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布煮仇。 她就那樣靜靜地躺著劳跃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浙垫。 梳的紋絲不亂的頭發(fā)上刨仑,一...
    開(kāi)封第一講書(shū)人閱讀 52,895評(píng)論 1 314
  • 那天郑诺,我揣著相機(jī)與錄音,去河邊找鬼杉武。 笑死辙诞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轻抱。 我是一名探鬼主播飞涂,決...
    沈念sama閱讀 41,300評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼祈搜!你這毒婦竟也來(lái)了较店?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,264評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夭问,失蹤者是張志新(化名)和其女友劉穎泽西,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體缰趋,經(jīng)...
    沈念sama閱讀 46,784評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捧杉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,870評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秘血。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片味抖。...
    茶點(diǎn)故事閱讀 40,989評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖灰粮,靈堂內(nèi)的尸體忽然破棺而出仔涩,到底是詐尸還是另有隱情,我是刑警寧澤粘舟,帶...
    沈念sama閱讀 36,649評(píng)論 5 351
  • 正文 年R本政府宣布熔脂,位于F島的核電站,受9級(jí)特大地震影響柑肴,放射性物質(zhì)發(fā)生泄漏霞揉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,331評(píng)論 3 336
  • 文/蒙蒙 一晰骑、第九天 我趴在偏房一處隱蔽的房頂上張望适秩。 院中可真熱鬧,春花似錦硕舆、人聲如沸秽荞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,814評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扬跋。三九已至,卻和暖如春耗式,著一層夾襖步出監(jiān)牢的瞬間胁住,已是汗流浹背趁猴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,940評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工刊咳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彪见,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,452評(píng)論 3 379
  • 正文 我出身青樓娱挨,卻偏偏與公主長(zhǎng)得像余指,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子跷坝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,995評(píng)論 2 361

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