一、常見錯誤總結
AttributeError 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x
IOError 輸入/輸出異常;基本上是無法打開文件
ImportError 無法引入模塊或包;基本上是路徑問題或名稱錯誤
IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊
IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
KeyError 試圖訪問字典里不存在的鍵
KeyboardInterrupt Ctrl+C被按下
NameError 使用一個還未被賦予對象的變量
SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了)
TypeError 傳入對象類型與要求的不符合
UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是由於另有一個同名的全局變量,
導致你以為正在訪問它
ValueError 傳入一個調用者不期望的值,即使值的類型是正確的
二、try except方法
有時候我們寫程序的時候,會出現一些錯誤或異常,導致程序終止,這個時候我們需要捕獲錯誤的類型,讓代碼更靈活,下面介紹下常用的try except來進行捕獲異常的方法。
處理單個異常:
語法:
>>> try:
>>> code
>>> except Error1 as e: #處理Error1異常
>>> print(e)
demo
>>> try:
>>> print(5/0) #該行為測試的語句
>>> except ZeroDivisionError as e: ## 如果測試的語句出現except后的異常(例中的ZeroDivisionError),則執行下一行代碼,否則跳過此模塊
>>> print(e) ## 打印錯誤名稱
division by zero ##執行結果
分開處理多個異常:
語法
>>> try:
>>> code
>>> except Error1 as e: #處理Error1異常
>>> print(e)
>>> except Error2 as e: #處理Error2異常
>>> print(e)
demo
>>> a = [0,1]
>>> try:
>>> print(a[3])
>>> print(5/0) ##語句在上一行就遇到錯誤傳到except里面去了,未檢測到此語句
>>> except ZeroDivisionError as e: #處理Error1異常
>>> print(e)
>>> except IndexError as e: #處理Error2異常
>>> print(e)
list index out of range
統一處理多個異常:
語法
>>> try:
>>> code
>>> except (Error1,Error) : ###無論遇到什么異常,都只會執行下一行要打印的一種東西
>>> print(e)
沒有異常,則走else部分的邏輯代碼
語法:無錫做婦科檢查哪家好 http://www.csjlyyfk.com/
>>> try:
>>> code
>>> except (Error1,Error2,...) as e:
>>> print(e)
>>> else:
>>> print("沒有錯誤,執行")
demo
>>> try:
>>> print(5/1)
>>> except ZeroDivisionError as e:
>>> print(e)
>>> else:
>>> print("沒有錯誤")
沒有錯誤
不管有沒有錯誤,都會執行finnally中的代碼
例如在對文件進行操作時候,如果文件讀寫過程中出現錯誤,無法關閉,可以將f.close()放在finally中,這樣無論是否有錯誤,文件都會關閉
>>> try:
>>> code
>>> except (Error1,Error2,...) as e:
>>> print(e)
>>> else:
>>> print("沒有錯誤,執行")
>>> finnally:
>>> print("不管有沒有錯,都執行finnally")