好程式設計師Python培訓分享Python程式設計中常見的異常處理
好程式設計師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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Python培訓分享Python異常處理程式設計師Python
- 好程式設計師Python培訓分享Python程式設計師面試技巧程式設計師Python面試
- 好程式設計師Python培訓分享四款Python程式庫程式設計師Python
- 好程式設計師Java培訓分享Java處理異常的幾個小知識程式設計師Java
- 好程式設計師Python培訓分享numpy簡介程式設計師Python
- 好程式設計師Python培訓分享Python如何呼叫RPC介面程式設計師PythonRPC
- 好程式設計師Python培訓分享Python配置gRPC環境程式設計師PythonRPC
- 好程式設計師Python培訓分享Python系列之字串的使用程式設計師Python字串
- 好程式設計師Python培訓分享Python系列之分支結構程式設計師Python
- 好程式設計師Python培訓分享Python爬蟲工具列表大全程式設計師Python爬蟲
- 好程式設計師Python培訓分享Python爬蟲相關框架程式設計師Python爬蟲框架
- 好程式設計師Python培訓分享學Python要注意什麼程式設計師Python
- 好程式設計師Python培訓分享如何寫Python裝飾器程式設計師Python
- 好程式設計師Python教程分享常見的Python面試題程式設計師Python面試題
- 好程式設計師Python培訓分享開發工具推薦程式設計師Python
- 好程式設計師Python培訓分享基礎入門Django程式設計師PythonDjango
- 好程式設計師Python培訓分享簡述fetchone()函式程式設計師Python函式
- 好程式設計師Python培訓分享For迴圈用法詳解程式設計師Python
- 好程式設計師Python培訓分享Python系列之迴圈結構程式設計師Python
- 好程式設計師Python培訓分享Python入門基礎知識程式設計師Python
- 好程式設計師Python培訓分享Python生成器與迭代器程式設計師Python
- 好程式設計師Python培訓分享Python之初識網路爬蟲程式設計師Python爬蟲
- 好程式設計師Python教程分享Python常見面試問題程式設計師Python面試
- 好程式設計師Python培訓分享Python中程式和執行緒詳解程式設計師Python執行緒
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Java培訓分享Java效能常見命令有哪些程式設計師Java
- 好程式設計師Python培訓分享函數語言程式設計之匿名函式程式設計師Python函數函式
- 好程式設計師Python培訓分享Python生成器的詳細介紹程式設計師Python
- 好程式設計師Python培訓分享網路爬蟲的分類程式設計師Python爬蟲
- 好程式設計師web前端培訓分享小白學web常見的問題程式設計師Web前端
- 好程式設計師Python培訓Python如何呼叫服務介面程式設計師Python
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Python培訓分享深入理解yield from語法程式設計師Python
- 好程式設計師Python培訓分享udp和tcp協議介紹程式設計師PythonUDPTCP協議
- 好程式設計師Python培訓分享列表去重中的copy問題程式設計師Python
- 好程式設計師Python培訓分享函式的定義與使用示例程式設計師Python函式
- 好程式設計師Python培訓分享print和return的作用及區別程式設計師Python
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML