上下文管理協議

2022-09-09 04:42:11 字數 1085 閱讀 2857

with open("

a.txt

") as f: #

開啟檔案,並自動關閉檔案

pass

#上下文管理協議

class

open:

def__init__

(self,name):

self.name =name

def__enter__

(self):

print("

執行enter")

print

(self)

return

self

def__exit__(self, exc_type, exc_val, exc_tb): #

當出現異常時,觸發,並返回__exit__中的三個引數

print("

執行exit")

print(exc_type) #

異常型別

print(exc_val) #

異常值print(exc_tb) #

異常traceback

return true #

retrue true 當出現異常時,直接吞沒異常,並結束with語句,程式繼續向下執行

with open(

"a.txt

") as f1: #

with時會觸發__enter__,拿到的結果是self,然後將self賦值給f1

print

(f1)

print

(f1.name)

print(ssssssssss) #

當這裡出現錯誤是,直接觸發__exit__,整個程式報錯結束,但返回true時,異常會被吞沒,with語句結束,程式繼續向下執行

print("

11111

") #

當with裡的**塊執行結束後,觸發__exit__

print("

000000000000

")

上下文管理協議

class open def init self,name self.name name def enter self print 執行enter def exit self,exc type,exc val,exc tb print 執行exit with open a.txt as f with...

上下文協議管理

with obj as f 塊 1.with obj 觸發obj.enter 拿到返回值 2.as f f 返回值 3.with obj as f 等同於 f obj.enter 4.執行 塊 一 沒有異常的情況下,整個 塊執行完畢後去觸發 exit 它的三個引數都為none 二 有異常的情況下,從...

python 上下文管理協議

class open def init self,name self.name name def enter self print 出現with語句,物件的 enter 被觸發,有返回值則賦值給as宣告的變數 return self def exit self,exc type,exc val,ex...