好程式設計師Python培訓分享Python程式設計中常見的異常處理

好程式設計師發表於2020-07-16

  好程式設計師Python 培訓分享 Python 程式設計中常見的異常處理,今天將對 python 程式設計中經常會遇到的一些報錯與異常的進行總結與分析,雖然不會面面俱到,但是可以提供一種面對這樣的問題時的思考方法,會對 python 的程式設計能力的提高有所幫助。

  初學python 經常會遇到的一些錯誤:

  下面錯誤型別的先後順序基本上是按照從0 到有一定基礎的過程會遇到的一些報錯問題:

  NameError :在剛開始接觸程式設計的朋友,容易犯這個錯誤,沒有宣告定義對應引用的變數,即,你來了一個無中生有。找到對應的變數,宣告即可。

  SyntaxError :這個出錯,都是語法型別的錯誤,例如多個半括號,少個半括號, for 迴圈時,末尾忘記英文冒號等等。出現這個錯誤,說明你對 python 的語法很不熟悉,多練習就是。

  IndentationError :縮排不正確, python 語法不熟練的明顯表現,採用 tab 鍵進行縮排比較比較方便,例外科普一個小技巧,在 jupyter 中如果要對一堆程式碼進行批次縮排時,選中這堆程式碼,按 tab 來進行縮排,按 shift+tab 程式碼整體前進。

  ImportError :開始出現這個錯誤,說明你有了一丟丟基礎,開始要調包了。但是還不是很熟練 python 中第三方包的使用方法。這裡具體說一下每一種方法的差異,就拿最常見的 pandas 來舉例

  import pandas as pd

  匯入pandas 包,記為 pd 。後續需要呼叫 pandas 庫底下的子函式 API 時,這樣操作: pd.read_csv 此時我們呼叫 pandas 下的一個檔案讀取函式 read_csv ,它支援許多格式的檔案的讀取,例如, csv,tsv,txt 等等,具體需要去探究。

  還有一種是:

  from pandas import *

  這個是匯入pandas 一級下屬的所有 API 介面,相當於把 pandas 的一堆工具散亂的扔給你,一是佔空間,二是用起來你得記住對應的函式才行,而第一種可以採用 tab 補全的方法,知道 API 介面大概拼寫即可。

  還有一種:

  from pandas import read_csv, concat

  這個就比較簡潔,只把自己需要的拿出來即可,在呼叫特別大的包的時候,這種方法比較好,例如sklearn ,很少有見 import sklearn as sl 吧,就像一直負重前行。在知道自己具體要用哪幾個 API 的情況下,這種最優。

  TypeError :這個型別的錯誤慢慢開始由於一些有些複雜的原因引起。例如:

  TypeError : argument of type 'int' is not iterable 此處是因為 int 不可迭代。

  TypeError: cannot unpack non-iterable int object 此處是迴圈的變數中的元素不是一個可以。這一型別的錯誤需要你對 python 有一些掌握,例如 dict key 是不可重複的等等,需要在錯誤中累積這一類的知識。

  MoudleNotFoundError :就是你匯入的包當前是木有的,這裡順便說一下各種下載包的方式,首先就是在編譯器裡,此操作不論是在 Windows 下還是公司的 Linux 下都可以這樣: !pip install module_name 感嘆號為英文的

  但是如果是阿里雲,騰訊雲,百度的ai-stduio 這種雲伺服器的話,需要做一定的改變: !pip install --user module_name 這個是一個小 tip 。個人有一種預感,以後雲伺服器會越來越普及,至少是在大資料演算法愛好者中, Windows 的,資料量稍微大一點,動不動就跑的當機,雲伺服器則不存在這個問題,而且現在慢慢開始有了限時免費的雲伺服器,再往以後可能就會像流量這樣便宜。

  ValueError :這個通常是在對一個資料容器進行拆解的時候,拆出來的元素個數與賦值的變數個數不匹配,例如:

  a,b,c = ['1','1','1','1'] 裡面四個元素,外面配三個變數,肯定報錯

  ValueError: too many values to unpack (expected 3)

  當然還有其他的原因造成ValueError ,例如:

  ValueError: The truth value of a Series is ambiguous

  ZeroDivisionError :這個就是你在做除法時,除數為 0 所致, python2 python3 的除法有所不同,有時候容易犯這個錯誤。 python2 的只是取整數部分,不四捨五入,例如 :

  a=0.6

  1/a python2 中是會報錯的。其他情況下報這個錯,就需要檢查一下你的對應變數的精度設定了,並且在迴圈指定條件逐步對某一初始為 0 的變數進行迭代累加的時候,也容易出現這個錯誤,例如,在機器學習演算法或者推薦演算法的召回率,準確率時,計算 hit ,資料質量較差時就容易出現這個問題。

  IndexError :索引出錯了,超出範圍。

  IndexError: list index out of range

  KeyError :出現 KeyError ,基本說明你開始會用 python 了,因為字典 dict python 中應用最為廣泛的資料儲存容器,學會字典的各種操作很重要。

  FileNotFoundError :可能是在你開始採用 python 進行一些資料分析預測,或者推薦演算法,或者 nlp 或者 cv 什麼的時候,檔案的路徑或者檔案格式,檔名出錯導致檔案找不到。

  AttributeError :說通俗一些,就是某個資料結構或者型別沒有某種操作,你卻非要用這種操作,那就要報錯了,例如:

  AttributeError: 'tuple' object has no attribute 'remove' 出現這樣的錯誤的時候,說明對 python 各種東西學習的有些多,混淆了一些操作。例如 list 的元素新增是 append ,你非要用 update 來給 list 新增,而 update set 或者 dict 的,如下:

  AttributeError: 'list' object has no attribute 'update'

  MemoryError :開始遇到這個錯誤的時候,說明你的 python 基礎基本掌握,就是在你在處理一個比較大的資料集的時候,你的程式太 low ,例如,各種迴圈,巢狀迴圈,電腦被你玩蒙圈了,記憶體不足。這個說明一點,要開始學習 python 的資料結構與演算法了,正式開始難點了。一些像小頂堆,大頂堆,二叉樹,動態規劃,連結串列,佇列的傢伙開始出現在你的視野裡,並且開始看不懂一些詭異的很巧妙的小演算法。

所以這就驗證了一個說法,python 入門容易,但請看清楚了,僅僅是入門容易,你不能一直站在門口吧,往裡面走一點,你就要費點勁。因此,需要進一步去鞏固基礎的東西,這些日常的報錯異常只是在反饋你的 bug ,自己的學習過程也是一個機器學習的 train test 的過程,學到東西開始用習題擬合,如果習題都是你做過的,抱歉,過擬合了,當上 test 的時候,你的正確率就大幅下降,你就需要修正你的訓練集了;如果你是個懶傢伙,習題沒做幾個,就直接上 test ,欠擬合了,結果還是不好。所以就是在這樣的不斷迭代最佳化的過程中,我們學習的知識模型的泛化能力越來越好。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2705051/,如需轉載,請註明出處,否則將追究法律責任。

相關文章