簡介:
程式在執行過程中不可避免會出現一些錯誤,比如:使用了沒有賦值過的變數、除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...