Python基礎課第十五節課記錄 異常處理

2021-09-29 05:24:39 字數 3787 閱讀 7839

簡介

程式在執行過程中不可避免會出現一些錯誤,比如:使用了沒有賦值過的變數、除0、使用了不存在的索引…這些錯誤在程式中我們就稱之為異常,程式在執行過程中,一旦出現異常會導致程式立即終止 異常後面的**都不會執行。

處理異常

程式出現異常,目的並不是要程式立即終止,python是希望在出現異常時,我們可以編寫**對異常進行處理。

語法(try語句)

try:

**塊(可能會出現錯誤的語句)

except 異常型別 as異常名:

**塊(出現錯誤以後的處理方式)

except 異常型別 as異常名:

**塊(出現錯誤以後的處理方式)

except 異常型別 as異常名:

**塊(出現錯誤以後的處理方式)

except 異常型別 as異常名:

**塊(出現錯誤以後的處理方式)

…else:

**塊(沒有錯誤時要執行的語句)

finally:

**塊(是否有異常都會執行)

try

:print(20

/0)# try中放置有可能出現錯誤的**

except

:print

('出錯啦哥們!!!!'

)# except中放置的是出錯以後的處理方式

else

:print

('程式沒有錯誤正常執行....'

)# else沒有錯誤執行的語句

finally

:print

('hello'

)# 出錯啦哥們!!!!

# hello

當在函式**現異常時,如果在函式中對異常進行了處理,則異常不會再傳播,如果函式中沒有對異常進行處理,則異常會繼續像函式呼叫處傳播,如果函式呼叫處處理了異常,則不再傳播,如果沒有處理則繼續像呼叫處傳播,直到傳遞到全域性作用域,如果依然沒有處理,則程式終止,並且顯示異常資訊。

當程式執行過程**現異常以後,所有的異常資訊會被專門儲存到乙個異常物件當中,而異常傳播時,實際上就是異常物件拋給了呼叫處,nameerror類專門處理變數的錯誤

deffn(

):print

('hello.........'

)print(20

/0)try

: fn(

)except

:pass

# hello.........

def

fn1():

print

('hello fn'

)print(20

/0)def

fn2():

print

('hello fn2'

) fn1(

)def

fn3():

print

('hello fn3'

) fn2(

)fn3(

)# hello fn3

# traceback (most recent call last):

# hello fn2

# hello fn

# file "d:/python-pycharm**/上課**整理/異常練習.py", line 32, in

# fn3()

# file "d:/python-pycharm**/上課**整理/異常練習.py", line 31, in fn3

# fn2()

# file "d:/python-pycharm**/上課**整理/異常練習.py", line 28, in fn2

# fn1()

# file "d:/python-pycharm**/上課**整理/異常練習.py", line 25, in fn1

# print(20 / 0)

# zerodivisionerror: division by zero

如果except後面不跟任何內容,則此時會捕獲到所有的異常,如果except後面跟著乙個異常型別,那麼此時它只會捕獲該型別的異常。

exception是所以異常類的父類,所以如果except後跟的是exception,它會捕獲到所有的異常,賦值給變數只會穿第乙個異常。

try

:print

(a)except nameerror:

print

('處理異常的邏輯..'

)print

('出現nameerror異常'

)finally

:print

('無論是否出現異常,都會執行'

)# 處理異常的邏輯..

# 出現nameerror異常

# 無論是否出現異常,都會執行

try

:print(20

/0)except zerodivisionerror:

print

('出現zerodivisionerror異常'

)finally

:print

('無論是否出現異常,都會執行'

)# 出現zerodivisionerror異常

# 無論是否出現異常,都會執行

try

:print(20

/0)print

(a)except exception as e:

print

('出現異常了'

, e,

type

(e))

finally

:print

('無論是否出現異常,都會執行'

)# 出現異常了 division by zero

# 無論是否出現異常,都會執行

丟擲異常,可以是用raise語句來丟擲異常,raise語句後面需要跟乙個異常類或者是異常的例項,丟擲異常的目的,告訴呼叫者這裡呼叫時可能出現問題,希望你自己處理下。

定義異常類,只需要繼承exception就可以了

class

myerror

(exception)

:pass

defadd

(a,b)

:# 如果a b中有負數,就像呼叫處拋乙個異常

if a <

0or b <0:

raise myerror(

'自定義異常資訊,引數中不能有負數'

) r = a + b

return r

print

(add(-1

,2))

# traceback (most recent call last):

# file "d:/python-pycharm**/上課**整理/異常練習.py", line 72, in

# print(add(-1, 2))

# file "d:/python-pycharm**/上課**整理/異常練習.py", line 68, in add

# raise myerror('自定義異常資訊,引數中不能有負數')

# __main__.myerror: 自定義異常資訊,引數中不能有負數

這節課主要講了異常處理,雖然課上聽懂了,但是在做筆記的時候還是感覺有點不熟練,有的知識點也忘記了,看來定時複習還是有好處的,這節課還講了檔案,但是我就沒整理了,在下節課一齊整理,下節課還是講檔案。加油,繼續努力!

Android http(第二十五節課)

hitp 1.1協議中共定義了八種方法來表明request uri指定的資源的不同操作方式。其中最常用的兩種請求方式是get和post。get方式與post方式的區別 get方式以實體的方式得到由請求url所指向的資源資訊,向伺服器提交 的引數跟在請求url後面。使用get方式訪問網路ual的長度是...

演算法設計課第十五周作業

given a string containing just the characters and find the length of the longest valid well formed parentheses substring.example 1 input output 2 expl...

F 入門 第二章 F 基礎 第十五節 記錄

前面已介紹過了列表 元組或陣列這些資料結構,除此之外,f 還有記錄這種資料結構。記錄表示幾個值的並列排放,具有每一種資料前加上名稱的這一特性。雖然相當於c語言中的結構體,但是在f 中另外有方法單獨描述c語言中的結構體,關於這個請在 物件導向 一節中詳細解釋。基本的記錄的寫法如下所示 記錄的定義 ty...