28 3 異常 斷言

2022-07-01 18:33:14 字數 3284 閱讀 5920

異常處理

什麼是異常

異常和錯誤的區別

異常發生了是什麼效果

如何檢視報錯資訊

最簡單的異常異常處理

pass

多分支異常處理

l = ['

d','

z','t'

]for i in enumerate(l ,1):

print(i[0],i[1])

try:

num = int(input('

num:'))

print(l[num-1])

except

valueerror:

print("

請輸入乙個數字")

except

indexerror:

print("

您輸入的數字無效")

#當出現valueerror、indexerror 可以很好的解決

但是異常是很多的,總部呢個全部except +異常:  把?

所以介紹一下 萬能異常

try

:

#name

dic={}

dic[

"key"]

except exception: #

萬能異常

pass

可是上面所有異常都給你解決了。你不是抓蝦嗎?

所以 這樣用/!

try

:

#name

dic ={}

dic[

"key"]

except exception as e: #

e隨意取,是乙個物件

print(type(e), e, e.__traceback__

.tb_lineno)

#'key' 18 (18是行數)

萬能異常和其他分支合作

try

: name

[3]import

aexcept nameerror: pass

except indexerror: pass

except exception: pass

#萬能異常永遠放在最後乙個except,因為上面有異常,就相應停止+報錯了

異常處理的其他機制

try+except

try

: name

[3]except

(indexerror,nameerror) as e:

print(e) #

name 'name' is not defined

try+except+else

try

: name

[3]import

aexcept

nameerror:

print("

name error")

else

:

print("

沒有錯,就執行else

")

try+ except+else+finally

try

: name

[3]import

aexcept

nameerror:

print("

name error")

else

:

print("

沒有錯,就執行else")

finally

:

print("

無論如何都會執行我

")

那finally無論如何都會執行,那有和放在平常的地方,有何區別, 有啥用?

例如開啟檔案 f = open(xx),最後finally 執行f.close()

居然return了後 ,還能執行我finally!?牛皮,靠譜

def

func():

try:

f = open('

file

',"w")

return

f.read()

finally

: f.close()

print('

執行我了,那麼就等於執行finally')

func()

++++++++++++++++執行我了,那麼就等於執行finally

traceback (most recent call last):

報錯資訊

view code

finally :資源**

有這麼幾種組合

try/excpet

try/excpet/else/finally

try/excpet/finally

try/finally

主動丟擲異常

raise  timeouterro

try

: num = int(input("

>>>"))

except

valueerror:

raise

nameerror

#先原封不動排除try語句出現的異常,再丟擲我們設定的nameerror,

自定義異常

class

ddexception(baseexception): # 或者繼承exception

def__init__

(self, msg):

self.msg =msg

raise ddexception('

這是乙個x錯誤,有x問題

') #

傳入錯誤提示

#exception 是祖宗能處理99%+的異常,baseexception是祖宗的祖宗 能處理全部異常

斷言

assert

布林值#

只要是這個布林是正確的 就往下走。錯誤就丟擲異常 相當於下面的if else

#好處是不用縮排,只要一行**

assert true
等於

if

false:

print(123)

else

:

raise assertionerror

使用異常處理的注意事項

斷言assert  ;丟擲異常 raise

後期寫框架的時候用

不能提示使用者。這是給程式設計師看的

異常 raise assert(斷言)

try except 語法 try 語句 執行別的 except 異常型別 語句 如果在try部份引發了 name 異常 except 異常型別 as 資料 語句 如果引發了 name 異常,獲得附加的資料 else 語句 如果沒有異常發生當程式出現錯誤,python會自動引發異常,也可以通過rai...

iOS斷言 拋異常

自定義描述異常資訊的desc就是所謂的拋異常 注意 assert是乙個巨集,只在debug版本中起作用,在release版本中,該語句是不起任何作用的。示例一 給label屬性賦值不能為空,新增斷言,如果為空,則直接crash,拋異常 import mainviewcontroller.h inte...

python異常和斷言

在寫程式時可能會遇到錯誤,整個程式就會崩潰,但我們希望程式能檢測錯誤並繼續執行。這可以使用try except語句來處理,把可能出錯的語句放在try子句中,如果發生錯誤,則轉到except子句。try print 2 0 except zerodivisionerror print error in...