震驚 python中的異常竟然是這樣的

2021-10-08 16:31:06 字數 3224 閱讀 1116

在我們日常的程式設計過程中,經常會出現報錯的情況,那鮮紅的顏色讓很多的程式猿心慌慌,寫碼一小時,找錯一整天,所以今天我們就來細緻的講解一下程式執行中的異常報錯,讓我們不在恐懼那小小的程式報錯(error),首先我們得知己知彼,才能百戰不殆!!???

當程式在執行**現的錯誤,或邏輯語法出現問題,直譯器此時無法繼續正常執行,反而出現了一些錯誤提示,這就是異常(錯誤或者bug),程式執行過程**現了異常,輕則無法實現功能或功能出錯,重則整個程式崩潰

以下面的報錯為例:

nameerror: name 'a'

isnot defined

異常資訊 ":"之前的是異常類 之後是異常資訊

常見的異常類:

知道了什麼是異常,我們就可以採用異常捕獲的方式來進行解決:

捕獲異常是在程式設計中常用的一種處理**可能出現漏洞的一些基礎解決方案

捕獲異常的做法 使用 try-expect 語法

try

:# 將自己覺得可能出現異常的模組**全部放到try裡面

print

("輸出程式"

)# 並沒有定義a變數,所以直接進行輸出的話就會報錯

# nameerror: name 'a' is not defined

print

(a)except

:# 如果上面的try出現了異常那麼程式不會進行報錯,而是進入except裡面執行程式

print

("出現錯誤"

)

但是這種方法只會知道**出現了問題,卻不知道具體出現的問題或具體**出現的問題

在捕獲多個異常的時候,可以在except後用元組的方式寫入多種異常類,也可以採用多個except

try

:print

(a)print(1

+"2"

)except

(typeerror,nameerror)

:print

("出現異常!"

)

但是這裡的異常類要包括可能出現的所有異常類,如果有"漏網之魚"則程式還是會報錯出現異常

這裡我們得知道所有異常類都是乙個類,都有乙個exception父類,因此,我們可以

try

:print

(a)print(1

+"2"

)except exception as result:

# as+變數名 輸出變數名會輸出異常的具體資訊

print

(result)

當我們發現了在try中的**並沒有異常時,我們可以用else來輸出我們想要的操作**

else 表示的是如果**沒有異常應該輸出的結果

finnally表示最終結果,不論**是否捕獲到異常(不管是進入了except還是else)都會執行finnally中的**

try

:print

(a)except exception as result:

print

(result)

else

:print

("**無異常!"

)finally

:print

("程式執行完畢"

)

俗話說的好,實踐是檢驗真理的唯一標準,我們學程式也不能光是紙上談兵,所以我們將結合下面的這個案例對異常的傳遞進行講解:

案例:

物件的必備屬性:姓名、年齡、性別、身高、體重

在註冊過程中需要檢測:姓名2-4位字元

入有誤要求丟擲異常並重新填寫

# 建立乙個類並新增姓名、年齡、性別、身高、體重屬性

class

register

(object):

def__init__

(self, name, age, ***, height, weight)

: self.name = name

self.age = age

self.*** = ***

self.height = height

self.weight = weight

self.add(

)def

add(self)

:dict

=class

nnameinputerror

(exception)

:# 建立乙個自定義的異常類

def__init__

(self,name)

: self.name=name

def__str__

(self)

:return f"你輸入的姓名為:,不符合條件,輸入的姓名長度應為2-4位字元!"

defmain()

:# 建立程式主入口

while

true

:# 建立迴圈,使我們每次輸入錯誤的時候都可以再次重新輸入

try:

name=

input

("請輸入姓名:")if

2>

len(name)

orlen

(name)

>4:

# 自定義異常

raise nnameinputerror(name)

# raise 關鍵字用於引發nnameinputerror異常

except exception as nameerror:

print

(nameerror)

else

:global new_name # 利用global函式是name的值可以影響到全域性

new_name=name

break

# 利用break跳出while迴圈

異常有時可能會成為令人頭疼的報錯,但如果我們能夠將其理解透徹,理解其中的門門道道,我們就可以將異常加之利用,稱為程式猿手中的趁手**!!

震驚,這個碼農竟然是個混子!

好久都沒寫東西了,不管是筆還是鍵盤,上次用書面做總結,應該是在三年前畢業時,真讓人害怕.png。也是看了別人的年終總結,感覺有些觸動。時間很快,這個概念是在我大學的時候才體會到的,分析了一下,根本原因是從高中畢業開始,白天時間被大大縮短了 高中畢業前早6晚11,大學時早10晚11,工作後早9晚12 ...

吃雞手遊竟然是Python寫的?

吃雞 有多熱,已經不用多說。但你知道嗎?你熱愛的 吃雞 可能是用python寫的。網易的兩大遊戲客戶端引擎,neox 和 messiah,都是使用 python 作為指令碼語言的。具體來說,伺服器端可以說是完全python,畢竟能夠熱更新的python可以不停服!當然遊戲的客戶端核心引擎部分,還是用...

Object Pascal與C 竟然是相同的!

object pascal與c 的相同之處!竟然這麼相同,包括相似的程式結構 而且,object pascal的語法竟然比c 還嚴格 怪不得borland能把object pascal和c 能混用 我看到以前有人說要把delphi中的vcl用c來寫,其實根本沒這個必要,這個vcl很容易地就可以轉成用...