1. 程式人生 > >python9之異常處理

python9之異常處理

tor 我們 索引超出 range pla hid div not 輸入

一、概述

  異常處理是當程序出錯了,但是我們又不想讓用戶看到這個錯誤,而且我在寫程序的時候已經預料到了它可以出現這樣的錯誤,出現這樣的錯誤代表著什麽,我們可以提前處理這些個錯誤。

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)
 
#輸出
數據庫連接不上了

自定義使用總結:

  1. 數據庫連接不上的信息
  2. 權限問題,解析是沒有權限了,給出異常提示
  3. 業務邏輯的錯誤

python9之異常處理