python常見錯(cuò)誤

原文地址:http://blog.csdn.net/u011339641/article/details/49943153
我們都知道,任何編程或者腳本語言在寫程序時(shí),都會有各種各樣的錯(cuò)誤異常出現(xiàn)。python當(dāng)然也不例外;本篇文章就是針對python基礎(chǔ)編程中一些經(jīng)常遇到的異常以及它們的解決方案。

  1. IndentationError 縮進(jìn)異常

這個(gè)是最簡單的異常,python沒有像java,c++那樣的分號,它在簡化代碼和增強(qiáng)可讀性的同時(shí),對程序縮進(jìn)就顯得異常嚴(yán)格,不能出一點(diǎn)錯(cuò)誤。如果你的程序報(bào)這種異常,很簡單,回去看看哪里縮進(jìn)有錯(cuò)誤吧!

2.SyntaxError 語法異常

語法異常和上述的縮進(jìn)異常是最先會被檢查出來的異常(如果你的主機(jī)系統(tǒng)一切正常),說明你有一段或者某些段的程序在基礎(chǔ)語法上有錯(cuò),比如說:for,if,else后面沒有跟冒號等

3.ImportError 導(dǎo)入模塊異常

各種模塊的導(dǎo)入都在Python代碼的最前面,如果你導(dǎo)入的模塊名稱有誤或者系統(tǒng)找不到你所定義的模塊,或者你還沒有安裝這個(gè)模塊,都會拋出該異常。解決方法也很簡單,就是檢查你的程序最前面的那幾行,沒安裝的就下載安裝,錯(cuò)誤的就改名字或者路徑。

4.IndexError 索引異常

序列的索引異常,通常都是這樣:IndexError: list index out of range。解決起來也很簡單,肯定就是列表或者元組哪塊引用一個(gè)索引值超出了其長度,根據(jù)traceback給的信息,你很快就會找到錯(cuò)誤所在。

5.NameError 未聲明變量/對象

你的某個(gè)變量或者對象沒有事先聲明,同樣根據(jù)traceback給的信息,你很快就會找到錯(cuò)誤所在。

6.TypeError 類型異常

對類型的無效操作,比如說字符串或者列表可以通過索引值來訪問其中的字符或者值,但是如果把索引用到字典上,那就會引發(fā)該錯(cuò)誤,因?yàn)樽值洳辉试S有索引操作的。

7.KeyError 請求一個(gè)不存在的字典關(guān)鍵字 下面給大家一個(gè)例子:

adict = {'host': 'earth', 'port': 80}

print adict['name']

Traceback :

....

KeyError: name

8.IOError 輸入輸出錯(cuò)誤

一般是打開一個(gè)不存在的磁盤文件會引發(fā)的錯(cuò)誤,任何類型的I/O錯(cuò)誤都會引發(fā)該異常。檢查你的文件操作語句,以及print語句

9.AtrributeError 嘗試訪問未知的對象屬性

python中也有對象,那么是對象就有屬性,當(dāng)你試圖引用一個(gè)對象的屬性時(shí),任何錯(cuò)誤都會引發(fā)該異常。一般都是屬性不存在導(dǎo)致的

10.ValueError 傳入無效參數(shù)

這是針對函數(shù)的參數(shù)傳輸問題,Python中的函數(shù)有參數(shù),每個(gè)參數(shù)也有自己的類型,如果你在調(diào)用函數(shù)過程中傳遞的參數(shù)類型無法匹配,那就會引發(fā)該異常,解決方法就很簡單樓

11.UnicodeError (UnicodeDecodeError 解碼錯(cuò)誤 UnicodeEncodeError 編碼錯(cuò)誤) Unicode相關(guān)錯(cuò)誤

終于寫到這個(gè)異常了,這算是最頭疼的異常了,出現(xiàn)的莫名其妙。反正意思就是字符串編碼解碼的錯(cuò)誤(通常伴隨著寫文件或者讀文件),這會涉及到你所讀文件的內(nèi)容(或者從數(shù)據(jù)庫中獲取的內(nèi)容)是什么類型的編碼,還有你用的是什么類型的編碼/解碼器。。你想想,UTF的解碼器肯定不能解碼用GBK編碼的內(nèi)容嘍,或者是已經(jīng)編碼過了你不能再進(jìn)行編碼吧?

舉個(gè)例子:在python中,str = '中國' str = u'中國' 。這兩個(gè)是不一樣的,前者就是標(biāo)準(zhǔn)的,沒做過任何處理的,最原始的字符串,而后者就是經(jīng)過unicode編碼的字符串,unicode編碼可以用不同類型的編碼器,比如上面說的UTF和GBK,所以想要解碼就要用相應(yīng)類型的解碼器,要保持統(tǒng)一。

當(dāng)你讀取文件內(nèi)容,并且對該內(nèi)容進(jìn)行一定的操作,可能就會引發(fā)這一類型的異常??隙ㄊ俏募?nèi)容本身的編碼和你操作所需的編碼(有些對字符串的操作對字符串的編碼類型有規(guī)定)不一樣導(dǎo)致的。解決方法就是確定哪里的編碼出錯(cuò),然后相應(yīng)地編碼解碼即可,如果你不知道原本是什么類型的編碼,你可以用到python中types這個(gè)模塊(import即可),它可以打印出你所處理的內(nèi)容都是什么類型的,這樣該編碼或者解碼自己心里就有數(shù)了。

跟最后一個(gè)異常相比,感覺前十個(gè)都Low爆了,這也是我的親身體驗(yàn),其它異常都好處理,就最后一個(gè)當(dāng)時(shí)讓我有點(diǎn)麻煩,具體的還要靠自己體會,我只能幫你們到這了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容