python異常處理

2021-10-04 18:56:49 字數 4946 閱讀 5381

錯誤:沒法通過其他**進行處理的問題 語法錯誤、邏輯錯誤

異常:多指程式在執行過程中,出現未知錯誤,語法和邏輯都是正確的,可以通過其他**進行處理修復

常見的系統異常

# 1、除零異常

# 1 / 0

# 2、名稱異常

# print(name)

# 3、型別異常

# "1" + 2

# 4、索引異常

l =[1,

2]# l[3]

# 鍵異常

dic =

# dic["add"]

# 值異常

# int("abc")

# 屬性異常

# name = "yl"

# print(name.xx)

# 迭代器異常

it =

iter([

1,2]

)print

(next

(it)

)print

(next

(it)

)# print(next(it))

# 自己定義的異常

# 繼承自exception

異常的解決

系統一開始已經內建了一些特定的應用場景,當我們寫**的過程當中,一旦觸發了這個場景,系統內部就會自動向外界丟擲這個場景,也就是所謂的異常不去處理這個異常,就是程式被終止執行,導致軟體的崩潰

# try:

# print(name) # 可能出現異常的**

# except nameerror: # 你要捕捉異常的類別

# print("名稱有問題,請仔細檢查") # 對異常處理

# else:

# # 沒有出現異常的處理

# finally:

# # 不管有沒有出現異常都會執行的**

try:1/

0print

(name)

# 從上往下檢測,先檢測先處理

except zerodivisionerror as ze:

print

("除零錯誤:"

, ze)

except nameerror as ne:

print

("名稱錯誤:"

, ne)

finally

:print

("不管有沒有出現異常都會執行的**"

)# 合併處理多個異常

try:1/

0print

(name)

# 從上往下檢測,先檢測先處理

except

(zerodivisionerror, nameerror)

:print

("異常"

)finally

:print

("不管有沒有出現異常都會執行的**"

)try:1

/0print

(name)

# 從上往下檢測,先檢測先處理

except exception as e:

print

("異常"

, e)

finally

:print

("不管有沒有出現異常都會執行的**"

)# with語句

# 適用於執行某段**a之前,進行預處理,執行**a結束之後,進行清理操作

# 檔案讀取的正常步驟:開啟、讀取、關閉

# 要保證,不管讀取檔案操作有沒有異常,都要關閉檔案

# try:

# 開啟檔案

# 讀取檔案

# finally:

# 關閉檔案

# 上述過於繁瑣

)# 應該以二進位制檔案讀取"rb"

f.readlines(

)except exception as e:

print

("異常提示"

, e)

finally

:print

("***"

) f.close(

)# 方案二

)# 自定義上下文管理器

class

test

:def

__enter__

(self)

:print

("enter"

)return

"***x"

def__exit__

(self, exc_type, exc_val, exc_tb)

:print

(self, exc_type, exc_val, exc_tb)

print

("exit"

)with test(

)as x:

# 先enter -> body -> exit

# x是enter方法執行的返回值

print

("body"

, x)

# x:"***x"

# 生成器

# 讓生成器通過乙個裝飾器快速變成乙個上下文管理器

import contextlib

@contextlib.contextmanager # 上下文管理器有進有出,有返回值

contextlib.closing快速讓擁有close(

)方法的物件變成上下文管理器

deftest()

:print(1

)# yield前面當作enter

yield

"***"

print(2

)# yield後面當作exit

with test(

)as x:

print(3

, x)

# 當作中間部分

# 把主要業務邏輯部分和異常處理部分進行分離

@contextlib.contextmanager

defze()

:try

:yield

except zerodivisionerror as e:

print

("error:"

, e)

x =1

y =0

with ze():

# 上下文管理器,先yield上面try->x/y->yield下面exception

x / y

class

test

:def

t(self)

:print

("tttt"

)def

close

(self)

:print

("資源釋放"

)def

__enter__

(self)

:return self

def__exit__

(self, exc_type, exc_val, exc_tb)

: self.close(

)with test(

)as t_obj:

# t是enter方法返回值,恰恰是物件本身

t_obj.t(

)class

test

:def

t(self)

:print

("tttt"

)def

close

(self)

:print

("資源釋放"

)# contextlib.closing快速讓擁有close()方法的物件變成上下文管理器

with contextlib.closing(test())

as t_obj:

# t是enter方法返回值,恰恰是物件本身

t_obj.t(

)

# 手動丟擲異常

# 通過raise語句直接丟擲異常

defsetage

(age)

:if age <=

0or age >=20:

# print("error")

raise valueerror(

"值錯誤"

)else

:print

("設定年齡"

, age)

# 自定義異常

class

lesszero

(exception)

:# 繼承exception

def__init__

(self, msg, error_code)

: self.msg = msg

self.ec = error_code

def__str__

(self)

:return self.msg +

str(self.ec)

pass

defsetage

(age)

:if age <=

0or age >=20:

# print("error")

raise lesszero(

"值錯誤"

,404

)else

:print

("設定年齡"

, age)

try:

setage(-90

)except lesszero as l:

print

("x"

, l)

python異常處理 Python 異常處理

使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...

python異常舉例 Python異常處理

1.1異常問題舉例 例一 i input 請輸入數字 請輸入數字 0 print i print 5 int i traceback most recent call last file line 1,in zerodivisionerror division by zero 上述 的報錯是除零的錯...

python異常處理

當你的程式中出現異常情況時就需要異常處理。比如當你開啟乙個不存在的檔案時。當你的程式中有一些無效的語句時,python會提示你有錯誤存在。下面是乙個拼寫錯誤的例子,print寫成了print。python是大小寫敏感的,因此python將引發乙個錯誤 print hello world file l...