python9之異常處理
阿新 • • 發佈:2017-06-13
tor 我們 索引超出 range pla hid div not 輸入 2.1 處理單個異常
一、概述
異常處理是當程序出錯了,但是我們又不想讓用戶看到這個錯誤,而且我在寫程序的時候已經預料到了它可以出現這樣的錯誤,出現這樣的錯誤代表著什麽,我們可以提前處理這些個錯誤。
try: code except AttributeError as e: print(e) except NameError as e: print(e) except Exception as e: print("其他錯誤",e) else: print("一切正常") finally: print("是否出錯都打印!")
二、異常處理
2.1 處理單個異常
語法如下:
try: code #處理的語句 except Error1 as e: #遇到Error1執行下面的語句,在python2中寫成except Error1,e print(e)
代碼如下:
name = [1,2,3] try: name[3] #不存在3這個下標值 except IndexError as e: #抓取 IndexError 這個異常 print(e) #e是錯誤的詳細信息 #輸出 list index out of range
2.2 處理多個異常
①寫多個except,語法如下:
try: code except Error1 as e: #處理Error1異常 print(e) except Error2 as e: #處理Error2異常 print(e)
②寫1個except,語法如下:
try: code except (Error1,Error2,...) as e: print(e)
註:第二種寫法的用處:括號裏面的所有錯誤,不管出現裏面任何一種錯誤都用統一的處理方法。
2.3 Exception異常
語法如下:
try: code except (Error1,Error2,...) as e: print(e) except Exception as e: #用Exception表示一下子抓住所有異常,這個一般情況下建議在異常最後面用,用在最後抓未知的異常 print(e)
2.4 else作用
作用:沒有異常,則走else部分的邏輯代碼
try: print("susu,handson") #代碼沒有異常 except (IndexError,KeyError) as e: print(e) except Exception as e: print(e) else: #沒有異常出錯,走else的邏輯代碼 print("沒有異常") #輸出 susu,handson 沒有異常
2.4 finnally作用
作用:不管有沒有錯誤,都會執行finnally中的代碼
語法如下:
try: code except (Error1,Error2,...) as e: print(e) except Exception as e: print(e) else: print("沒有錯誤,執行") finnally: print("不管有沒有錯,都執行finnally")
三、異常處理流程圖
四、異常大全
4.1 常用異常
AttributeError 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x IOError 輸入/輸出異常;基本上是無法打開文件 ImportError 無法引入模塊或包;基本上是路徑問題或名稱錯誤 IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊 IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5] KeyError 試圖訪問字典裏不存在的鍵 KeyboardInterrupt Ctrl+C被按下 NameError 使用一個還未被賦予對象的變量 SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了) TypeError 傳入對象類型與要求的不符合 UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是由於另有一個同名的全局變量, 導致你以為正在訪問它 ValueError 傳入一個調用者不期望的值,即使值的類型是正確的
4.2 更多異常
1 ArithmeticError 2 AssertionError 3 AttributeError 4 BaseException 5 BufferError 6 BytesWarning 7 DeprecationWarning 8 EnvironmentError 9 EOFError 10 Exception 11 FloatingPointError 12 FutureWarning 13 GeneratorExit 14 ImportError 15 ImportWarning 16 IndentationError 17 IndexError 18 IOError 19 KeyboardInterrupt 20 KeyError 21 LookupError 22 MemoryError 23 NameError 24 NotImplementedError 25 OSError 26 OverflowError 27 PendingDeprecationWarning 28 ReferenceError 29 RuntimeError 30 RuntimeWarning 31 StandardError 32 StopIteration 33 SyntaxError 34 SyntaxWarning 35 SystemError 36 SystemExit 37 TabError 38 TypeError 39 UnboundLocalError 40 UnicodeDecodeError 41 UnicodeEncodeError 42 UnicodeError 43 UnicodeTranslateError 44 UnicodeWarning 45 UserWarning 46 ValueError 47 Warning 48 ZeroDivisionError 49 50 更多異常View Code
4.3 ValueError
s1 = ‘hello‘ try: int(s1) except ValueError, e: #python2.7的寫法 print e
五、自定義異常
5.1 自定義異常
class GaoError(Exception): #定義一個異常類,繼承Exception def __init__(self,message): self.message = message def __str__(self): return self.message #給對象取一個名字
5.2 觸發自定義異常
try: raise GaoError("數據庫連接不上了") #觸發自定義異常,GaoError("數據庫連接不上了")這個對象 except GaoError as e: print(e) #輸出 數據庫連接不上了
自定義使用總結:
- 數據庫連接不上的信息
- 權限問題,解析是沒有權限了,給出異常提示
- 業務邏輯的錯誤
python9之異常處理