Python 中 __enter__ __exit__ 方法

class A:
    def __enter__(self):
        return '%s is good' % self
    def __exit__(self, exc_type, exc_value, traceback):
        if exc_type == ZeroDivisionError:
            print(exc_value)
            print(traceback)
            return True
        elif exc_type == IndexError:
            print(exc_value, type(exc_value))
            print(traceback)
            return True

with A():
    a = []
    a[0]
# 輸出
list index out of range <class 'IndexError'>
<traceback object at 0x10b1e9548>

__enter__

__enter__ 用于賦值給 as 后面的變量。不過 with 語句中 as 不是必須的。__enter__ 和 __exit__ 必須并用。

__exit__

用于捕獲異常,它的返回值是一個 boolean 對象。除了 self 之外,必須傳入另外三個參數(shù),分別表示 exception 的類型,值(如 IndexError: list index out of range 中,冒號后面的部分就是值),以及 traceback。
返回 True 則表示這個異常被忽略。
返回 None, False 等則這個異常會拋出。
如果要忽略所有的異??梢赃@樣寫:

def __exit__(self, exc_type, exc_value, traceback):
    return True

經(jīng)過測試, SyntaxError 是不能忽略的,其他已知的是可以的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容