2020-07-16
Python培訓(xùn) Python編程
好程序員Python培訓(xùn)分享Python編程中常見的異常處理,今天將對(duì)python編程中經(jīng)常會(huì)遇到的一些報(bào)錯(cuò)與異常的進(jìn)行總結(jié)與分析,雖然不會(huì)面面俱到,但是可以提供一種面對(duì)這樣的問題時(shí)的思考方法,會(huì)對(duì)python的編程能力的提高有所幫助。
初學(xué)python經(jīng)常會(huì)遇到的一些錯(cuò)誤:
下面錯(cuò)誤類型的先后順序基本上是按照從0到有一定基礎(chǔ)的過程會(huì)遇到的一些報(bào)錯(cuò)問題:
NameError:在剛開始接觸編程的朋友,容易犯這個(gè)錯(cuò)誤,沒有聲明定義對(duì)應(yīng)引用的變量,即,你來了一個(gè)無中生有。找到對(duì)應(yīng)的變量,聲明即可。
SyntaxError:這個(gè)出錯(cuò),都是語(yǔ)法類型的錯(cuò)誤,例如多個(gè)半括號(hào),少個(gè)半括號(hào),for循環(huán)時(shí),末尾忘記英文冒號(hào)等等。出現(xiàn)這個(gè)錯(cuò)誤,說明你對(duì)python的語(yǔ)法很不熟悉,多練習(xí)就是。
IndentationError:縮進(jìn)不正確,python語(yǔ)法不熟練的明顯表現(xiàn),采用tab鍵進(jìn)行縮進(jìn)比較比較方便,例外科普一個(gè)小技巧,在jupyter中如果要對(duì)一堆代碼進(jìn)行批量縮進(jìn)時(shí),選中這堆代碼,按tab來進(jìn)行縮進(jìn),按shift+tab代碼整體前進(jìn)。
ImportError:開始出現(xiàn)這個(gè)錯(cuò)誤,說明你有了一丟丟基礎(chǔ),開始要調(diào)包了。但是還不是很熟練python中第三方包的使用方法。這里具體說一下每一種方法的差異,就拿最常見的pandas來舉例
import pandas as pd
導(dǎo)入pandas包,記為 pd。后續(xù)需要調(diào)用pandas庫(kù)底下的子函數(shù)API時(shí),這樣操作:pd.read_csv 此時(shí)我們調(diào)用pandas下的一個(gè)文件讀取函數(shù)read_csv,它支持許多格式的文件的讀取,例如,csv,tsv,txt等等,具體需要去探究。
還有一種是:
from pandas import *
這個(gè)是導(dǎo)入pandas一級(jí)下屬的所有API接口,相當(dāng)于把pandas的一堆工具散亂的扔給你,一是占空間,二是用起來你得記住對(duì)應(yīng)的函數(shù)才行,而diyi種可以采用tab補(bǔ)全的方法,知道API接口大概拼寫即可。
還有一種:
from pandas import read_csv, concat
這個(gè)就比較簡(jiǎn)潔,只把自己需要的拿出來即可,在調(diào)用特別大的包的時(shí)候,這種方法比較好,例如sklearn,很少有見 import sklearn as sl 吧,就像一直負(fù)重前行。在知道自己具體要用哪幾個(gè)API的情況下,這種最優(yōu)。
TypeError:這個(gè)類型的錯(cuò)誤慢慢開始由于一些有些復(fù)雜的原因引起。例如:
TypeError : argument of type 'int' is not iterable 此處是因?yàn)?/font>int不可迭代。
TypeError: cannot unpack non-iterable int object 此處是循環(huán)的變量中的元素不是一個(gè)可以。這一類型的錯(cuò)誤需要你對(duì)python有一些掌握,例如dict的key是不可重復(fù)的等等,需要在錯(cuò)誤中累積這一類的知識(shí)。
MoudleNotFoundError:就是你導(dǎo)入的包當(dāng)前是木有的,這里順便說一下各種下載包的方式,首先就是在編譯器里,此操作不論是在Windows下還是公司的Linux下都可以這樣:!pip install module_name 感嘆號(hào)為英文的
但是如果是阿里云,騰訊云,百度的ai-stduio這種云服務(wù)器的話,需要做一定的改變:!pip install --user module_name 這個(gè)是一個(gè)小tip。個(gè)人有一種預(yù)感,以后云服務(wù)器會(huì)越來越普及,至少是在大數(shù)據(jù)算法愛好者中,Windows的,數(shù)據(jù)量稍微大一點(diǎn),動(dòng)不動(dòng)就跑的死機(jī),云服務(wù)器則不存在這個(gè)問題,而且現(xiàn)在慢慢開始有了限時(shí)免費(fèi)的云服務(wù)器,再往以后可能就會(huì)像流量這樣便宜。
ValueError:這個(gè)通常是在對(duì)一個(gè)數(shù)據(jù)容器進(jìn)行拆解的時(shí)候,拆出來的元素個(gè)數(shù)與賦值的變量個(gè)數(shù)不匹配,例如:
a,b,c = ['1','1','1','1'] 里面四個(gè)元素,外面配三個(gè)變量,肯定報(bào)錯(cuò)
ValueError: too many values to unpack (expected 3)
當(dāng)然還有其他的原因造成ValueError,例如:
ValueError: The truth value of a Series is ambiguous
ZeroDivisionError:這個(gè)就是你在做除法時(shí),除數(shù)為0所致,python2與python3的除法有所不同,有時(shí)候容易犯這個(gè)錯(cuò)誤。python2的只是取整數(shù)部分,不四舍五入,例如:
a=0.6
1/a 在python2中是會(huì)報(bào)錯(cuò)的。其他情況下報(bào)這個(gè)錯(cuò),就需要檢查一下你的對(duì)應(yīng)變量的精度設(shè)置了,并且在循環(huán)指定條件逐步對(duì)某一初始為0的變量進(jìn)行迭代累加的時(shí)候,也容易出現(xiàn)這個(gè)錯(cuò)誤,例如,在機(jī)器學(xué)習(xí)算法或者推薦算法的召回率,準(zhǔn)確率時(shí),計(jì)算hit,數(shù)據(jù)質(zhì)量較差時(shí)就容易出現(xiàn)這個(gè)問題。
IndexError:索引出錯(cuò)了,超出范圍。
IndexError: list index out of range
KeyError:出現(xiàn)KeyError,基本說明你開始會(huì)用python了,因?yàn)樽值?/font>dict是python中應(yīng)用最為廣泛的數(shù)據(jù)存儲(chǔ)容器,學(xué)會(huì)字典的各種操作很重要。
FileNotFoundError:可能是在你開始采用python進(jìn)行一些數(shù)據(jù)分析預(yù)測(cè),或者推薦算法,或者nlp或者cv什么的時(shí)候,文件的路徑或者文件格式,文件名出錯(cuò)導(dǎo)致文件找不到。
AttributeError:說通俗一些,就是某個(gè)數(shù)據(jù)結(jié)構(gòu)或者類型沒有某種操作,你卻非要用這種操作,那就要報(bào)錯(cuò)了,例如:
AttributeError: 'tuple' object has no attribute 'remove'出現(xiàn)這樣的錯(cuò)誤的時(shí)候,說明對(duì)python各種東西學(xué)習(xí)的有些多,混淆了一些操作。例如list的元素添加是append,你非要用update來給list添加,而update是set或者dict的,如下:
AttributeError: 'list' object has no attribute 'update'
MemoryError:開始遇到這個(gè)錯(cuò)誤的時(shí)候,說明你的python基礎(chǔ)基本掌握,就是在你在處理一個(gè)比較大的數(shù)據(jù)集的時(shí)候,你的程序太low,例如,各種循環(huán),嵌套循環(huán),電腦被你玩蒙圈了,內(nèi)存不足。這個(gè)說明一點(diǎn),要開始學(xué)習(xí)python的數(shù)據(jù)結(jié)構(gòu)與算法了,正式開始難點(diǎn)了。一些像小頂堆,大頂堆,二叉樹,動(dòng)態(tài)規(guī)劃,鏈表,隊(duì)列的家伙開始出現(xiàn)在你的視野里,并且開始看不懂一些詭異的很巧妙的小算法。
所以這就驗(yàn)證了一個(gè)說法,python入門容易,但請(qǐng)看清楚了,僅僅是入門容易,你不能一直站在門口吧,往里面走一點(diǎn),你就要費(fèi)點(diǎn)勁。因此,需要進(jìn)一步去鞏固基礎(chǔ)的東西,這些日常的報(bào)錯(cuò)異常只是在反饋你的bug,自己的學(xué)習(xí)過程也是一個(gè)機(jī)器學(xué)習(xí)的train與test的過程,學(xué)到東西開始用習(xí)題擬合,如果習(xí)題都是你做過的,抱歉,過擬合了,當(dāng)上test的時(shí)候,你的正確率就大幅下降,你就需要修正你的訓(xùn)練集了;如果你是個(gè)懶家伙,習(xí)題沒做幾個(gè),就直接上test,欠擬合了,結(jié)果還是不好。所以就是在這樣的不斷迭代優(yōu)化的過程中,我們學(xué)習(xí)的知識(shí)模型的泛化能力越來越好。
本文內(nèi)容轉(zhuǎn)載自網(wǎng)絡(luò),本著分享與傳播的原則,版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系我們進(jìn)行刪除。
開班時(shí)間:2021-04-12(深圳)
開班盛況開班時(shí)間:2021-05-17(北京)
開班盛況開班時(shí)間:2021-03-22(杭州)
開班盛況開班時(shí)間:2021-04-26(北京)
開班盛況開班時(shí)間:2021-05-10(北京)
開班盛況開班時(shí)間:2021-02-22(北京)
開班盛況開班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開班時(shí)間:2020-09-21(上海)
開班盛況開班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開班時(shí)間:2019-07-22(北京)
開班盛況Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號(hào)-5 京公網(wǎng)安備 11010802035720號(hào)