Python基礎:異常處理
一,學習的内容
Python 異常處理
異常就是運作期檢測到的錯誤。計算機語言針對可能出現的錯誤定義了異常類型,某種錯誤引發對應的異常時,異常處理程式将被啟動,進而恢複程式的正常運作。
- Python 标準異常總結
BaseException:所有異常的 基類
Exception:正常異常的 基類
StandardError:所有的内建标準異常的基類
ArithmeticError:所有數值計算異常的基類
FloatingPointError:浮點計算異常
OverflowError:數值運算超出最大限制
ZeroDivisionError:除數為零
AssertionError:斷言語句(assert)失敗
AttributeError:嘗試通路未知的對象屬性
EOFError:沒有内建輸入,到達EOF标記
EnvironmentError:作業系統異常的基類
IOError:輸入/輸出操作失敗
OSError:作業系統産生的異常(例如打開一個不存在的檔案)
WindowsError:系統調用失敗
ImportError:導入子產品失敗的時候
KeyboardInterrupt:使用者中斷執行
LookupError:無效資料查詢的基類
IndexError:索引超出序列的範圍
KeyError:字典中查找一個不存在的關鍵字
MemoryError:記憶體溢出(可通過删除對象釋放記憶體)
NameError:嘗試通路一個不存在的變量
UnboundLocalError:通路未初始化的本地變量
ReferenceError:弱引用試圖通路已經垃圾回收了的對象
RuntimeError:一般的運作時異常
NotImplementedError:尚未實作的方法
SyntaxError:文法錯誤導緻的異常
IndentationError:縮進錯誤導緻的異常
TabError:Tab和空格混用
SystemError:一般的解釋器系統異常
TypeError:不同類型間的無效操作
ValueError:傳入無效的參數
UnicodeError:Unicode相關的異常
UnicodeDecodeError:Unicode解碼時的異常
UnicodeEncodeError:Unicode編碼錯誤導緻的異常
UnicodeTranslateError:Unicode轉換錯誤導緻的異常
- Python标準警告總結
Warning:警告的基類
DeprecationWarning:關于被棄用的特征的警告
FutureWarning:關于構造将來語義會有改變的警告
UserWarning:使用者代碼生成的警告
PendingDeprecationWarning:關于特性将會被廢棄的警告
RuntimeWarning:可疑的運作時行為(runtime behavior)的警告
SyntaxWarning:可疑文法的警告
ImportWarning:用于在導入子產品過程中觸發的警告
UnicodeWarning:與Unicode相關的警告
BytesWarning:與位元組或位元組碼相關的警告
ResourceWarning:與資源使用相關的警告
總結:
AttributeError 試圖通路一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x
IOError 輸入/輸出異常;基本上是無法打開檔案
ImportError 無法引入子產品或包;基本上是路徑問題或名稱錯誤
IndentationError 文法錯誤(的子類) ;代碼沒有正确對齊
IndexError 下标索引超出序列邊界,比如當x隻有三個元素,卻試圖通路x[5]
KeyError 試圖通路字典裡不存在的鍵
KeyboardInterrupt Ctrl+C被按下
NameError 使用一個還未被賦予對象的變量
SyntaxError Python代碼非法,代碼不能編譯(個人認為這是文法錯誤,寫錯了)
TypeError 傳入對象類型與要求的不符合
UnboundLocalError 試圖通路一個還未被設定的局部變量,基本上是由于另有一個同名的全局變量,導緻你以為正在通路它
ValueError 傳入一個調用者不期望的值,即使值的類型是正确的
- try - except 語句
(1)單個分支
try:
檢測範圍
except Exception[as reason]:
出現異常後的處理代碼
try 語句按照如下方式工作:
首先,執行try子句(在關鍵字try和關鍵字except之間的語句)
如果沒有異常發生,忽略except子句,try子句執行後結束。
如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分将被忽略。如果異常的類型和except之後的名稱相符,那麼對應的except子句将被執行。最後執行try - except語句之後的代碼。
如果一個異常沒有與任何的except比對,那麼這個異常将會傳遞給上層的try中。
eg:
1,try:
2,f = open(‘test.txt’)
3 print(f.read())
4 ,f.close()
5,except OSError:
6 print(‘打開檔案出錯’)
打開檔案出錯
(2)多個分支
一個try語句可能包含多個except子句,分别來處理不同的特定的異常。最多隻有一個分支會被執行。
【例子】
1,try:
2,int(“abc”)
3,s = 1 + ‘1’
4,f = open(‘test.txt’)
5,print(f.read())
6,f.close()
7,except OSError as error:
8,print(‘打開檔案出錯\n原因是:’ + str(error))
9,except TypeError as error:
10, print(‘類型出錯\n原因是:’ + str(error))
11 ,except ValueError as error:
12, print(‘數值出錯\n原因是:’ + str(error))
數值出錯
原因是:invalid literal for int() with base 10: ‘abc’
4, try - except - finally 語句
try: 檢測範圍 except Exception[as reason]: 出現異常後的處理代碼 finally: 無論如何都會被執行的代碼
不管try子句裡面有沒有發生異常,finally子句都會執行
5,try - except - else 語句
如果在try子句執行時沒有發生異常,Python将執行else語句
6,raise語句
Python 使用raise語句抛出一個指定的異常。
例子】
try:
raise NameError(‘HiThere’)
except NameError:
print(‘An exception flew by!’)
An exception flew by!
二,難題解惑
1,try-except
這個我真的有點懵,但是我詢問了朋友和百度,終于明白一點了
Python 提供了try except語句捕獲并處理異常,該異常處理語句的基本文法結構如下:
try:
可能産生異常的代碼塊
except [(Error1, Error2, …) [as e]]:
處理異常的代碼塊1
except [(Error3, Error4, …) [as e]]:
處理異常的代碼塊2
該格式中,[] 括起來的部分可以使用,也可以省略;(Error1,Error2,…) 、(Error3,Error4,…) 表示各自的 except 塊可以處理異常的具體類型;[as e] 表示将異常類型指派給變量 e(友善在 except 塊中調用異常類型)。
注意,except 後面也可以不指定具體的異常名稱,這樣的話,表示要捕獲所有類型的異常。
另外,從 try except 的基本文法格式可以看出,try 塊僅有一個,但 except 代碼塊可以有多個,這是為了針對不同的異常類型提供不同的異常處理方式。當程式發生不同的意外情況時,會對應不同的異常類型,Python 解釋器就會根據該異常類型來決定使用哪個 except 塊來處理該異常。
eg:
try:
a = int(input(“輸入被除數:”))
b = int(input(“輸入除數:”))
c = a / b
print(“您輸入的兩個數相除的結果是:”, c )
except (ValueError, ArithmeticError):
print(“程式發生了數字格式異常、算術異常之一”)
except :
print(“未知異常”)
print(“程式繼續運作”)
程式運作結果為:
輸入被除數:a
17:33:20
程式發生了數字格式異常、算術異常之一
程式繼續運作
上面程式中,第 6 行代碼使用了(ValueError, ArithmeticError)來指定所捕獲的異常類型,這就表明該 except 塊可以同時捕獲這 2 種類型的異常;第 8 行代碼隻有 except 關鍵字,并未指定具體要捕獲的異常類型,這種省略異常類的 except 語句也是合法的,它表示可捕獲所有類型的異常,一般會作為異常捕獲的最後一個 except 塊。
2, try - except - finally/else
try:
可能觸發異常的語句
except 錯誤類型1 [as 變量2]:
異常處理語句1
except 錯誤類型2 [as 變量2]:
異常處理語句2
except (錯誤類型3,錯誤類型4,······) [as 變量3]:
異常處理語句3
except:
異常處理語句other
else:
未發生異常的語句
finally:
最終語句
eg: 17:34:49
def f():
try:
print(1)
return 1
except:
print(2)
return 2
else:
print(3)
return 3
finally:
print(4)
return 4
1
4
4
了解更多分析及資料抓取可檢視:
http://cloud.yisurvey.com:9081/html/d8acf20b-342f-4806-8dcc-5e6a8d00881d.html?ly=csdn
本文轉載自網際網路、僅供學習交流,内容版權歸原作者所有,如涉作品、版權和其他問題請聯系我們删除處理。
特别說明:本文旨在技術交流,請勿将涉及的技術用于非法用途,否則一切後果自負。如果您覺得我們侵犯了您的合法權益,請聯系我們予以處理。