python 捕獲異常

2022-05-14 16:15:14 字數 4578 閱讀 2217

異常:由於**的邏輯或者語法錯誤導致的程式中斷。

在學習python的過程當中,大家一定要區分清楚異常和布林值false

布林值的false只是乙個值,通常代表的是乙個條件的不成立,常用於邏輯判斷

比如:

1 num = 2

2print(num > 3)

3if num > 3:

4print("

num > 3

")

異常指的是由於**的邏輯或者語法錯誤導致的程式中斷

比如:

1 num = 2

2 2+"2"

了解了上面的邏輯之後,我們來看看大家在**當中經常出現的幾種錯誤,和常見原因

錯誤型別

錯誤名稱

錯誤解釋

syntaxerror

語法錯誤

是語法導致的錯誤,通常的報錯是 invalid syntax,比如:縮排語句塊不加冒號,遇到這種錯誤,就要詳細的檢查自己的的語句了

indexerror

索引錯誤

是索引引用導致的錯誤,通常的報錯是 list out of range,遇到這個錯誤就要認真的檢查自己是不是取了乙個超出序列長度的索引

nameerror

命名錯誤   

是變數命名導致的錯誤,通常的報錯是 no model named ... ,遇到這個錯誤就要檢視自己的變數了,初學者要注意是不是字串沒有加引號

attributeerror

屬性錯誤

是呼叫物件屬性時候導致的錯誤,通常報錯是 ... object has no attribute ... 遇到這個錯誤就要檢視自己的物件是不是呼叫了不存在的屬性了

keyerror

鍵錯誤是字典取值時候導致的錯誤,字典沒有這個鍵

typeerror 

型別錯誤

是對物件進行非本型別操作時候導致的,沒有固定的報錯,常見的有 ... not callabel ,遇到這種錯誤,要認真梳理自己對物件的操作了,比如,非函式物件加括號呼叫

當然異常的型別還有好多,在這就不一一枚舉了,我們來看捕獲異常的關鍵字

捕獲異常最簡單的寫法如下

try:  #

嘗試執行縮排下面的報錯

1+"1"

except: #

如果發生錯誤,列印error

print("

error")

>>> error

這裡我們嘗試執行 1+「1」,如果可以執行就執行,如果發生錯誤就執行下面的**。

但是,在工作當中,這樣的**並沒有太好的效果,我們通過這段**既無法實現錯誤內容的輸出,也不能實現錯誤的處理,只是讓程式不報錯的執行了下去,這個顯然不好使。

所以我們首先要考慮的就是如何獲取具體的錯誤內容,例子如下:

例1:

try

: 1+"1"

except

exception as e:

print

(e)>>> unsupported operand type(s) for +: '

int'

and'

str'

1、exception 所有的錯誤

2、as 別名

所以例1**的含義就是嘗試執行 1+"1」,如果只成功就可以,否則無論發生任何錯誤,都把這個錯誤返回的內容起別名為e,在下面輸出出來。在這裡要注意的一點就是,e可以被列印但是不是字串物件,所以不可以進行任何字串操作。

try

: 1+"1"

except

exception as e:

print

(type(e))

>>> 'typeerror

'>

例2:

try

: 1+"1"

except

typeerror as e:

print

(e)>>> unsupported operand type(s) for +: '

int'

and'

str'

這裡和上面的例1唯一的不同就在於except後面跟了具體的錯誤型別,意思很明確,當發生typeerror的時候,我進行如下處理,至於其他錯誤,就讓他報錯去吧。

當然這樣的說法有點隨性,認真的檢視,著多種錯誤型別的捕獲異常給我們對同一語句進行不同的異常處理帶來了很大的遍歷性,畢竟不是所有的錯誤都可以pass!

了解了上面的報錯,那麼接下來要認真研究的就是捕獲異常的另外兩個關鍵字:else 和finally

首先是他兩的邏輯

else:代表在try執行成功之後,進行執行,放在except的後面

finally:代表最後,無論執行try成功還是失敗,都會執行。作為最後的收尾

了解之後,我們來檢視我們例子

例1:

1

try:

2 1+"1"

3except

exception as e:

4print

(e)5

else:6

print("

it is ok")

7finally:8

print("

ok it's over")

910 >>> unsupported operand type(s) for +: '

int'

and'

str'

11 >>> ok it'

s over

例2:

1

try:

2 1+1

3except

exception as e:

4print

(e)5

else:6

print("

it is ok")

7finally:8

print("

ok it's over")

910 >>> it is

ok11 >>> ok it'

s over

在例1當中,我們執行try失敗,所以except和finally執行,在例子2當中,我們執行try成功,所以else和finally成功。

else和finally的出現極大的方便了我們對捕獲異常和異常處理的完整流程描述,不如下面的例子

1

import

pymysql

2try:3

#嘗試連線資料庫

4 connect =pymysql.connect(

5 host = "

localhost",

6 user = "

root",

7 password = "

123"

,8 database = "

outtest"9

)10except

exception as e:11#

失敗輸出錯誤

12print

(e)13

else:14

#如果成功進行資料查詢

15 cursor =connect.cursor()

16 cursor.execute("

select * from login")

17 all_data =cursor.fetchall()

18print

(all_data)

19finally:20

#不論如何進行結束通知

21print("

執行結束

")

到這裡,可能好多讀者覺得捕獲異常到此結束,其實並不是這樣,還可以有乙個好的建議給到大家,我們可以嘗試使用。先看下面的兩個案例:

例1:

try

: 1+"1"

except

exception as e:

print

(e)>>> unsupported operand type(s) for +: '

int'

and'

str'

例2:

try

: 1+"1"

except

exception as e:

error =traceback.format_exc()

print

(error)

>>>traceback (most recent call last):

file

"c:/users/bian/desktop/testproject/twistedproject/twistedproject.py

", line 67, in

1+"1

"typeerror: unsupported operand type(s)

for +: '

int'

and'

str'

例1和例2同樣實現了捕獲異常的功能,但是例子2的返回更加的專業,並且利於除錯 

python異常捕獲 如何捕獲Python中的異常

python 提供了try except語句捕獲並處理異常,該異常處理語句的基本語法結構如下 try 可能產生異常的 塊 except error1,error2,as e 處理異常的 塊1 except error3,error4,as e 處理異常的 塊2該格式中,括起來的部分可以使用,也可以省...

python異常捕獲

python的異常處理如c c 的結構一樣。python用try.except.c c 則用try.catch.並不難理解。在對具體錯誤的獲取則有點不同,主要是語法的差異上。c 在catch後可生成相應乙個異常的類,然後可通過類物件獲取相關的錯誤資訊。而python則不同,它在獲取錯誤資訊有點奇怪,...

Python捕獲異常

如果感覺 可能會出現異常,可以通過如下兩種方法捕獲異常。一 捕獲所以異常 try statement1 statement2 except exception,e print exception,e 二 通過trace模組檢視 import traceback try statement1 stat...