class Player:
    def __enter__(self):
        print('enter')
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        if exc_tb:
            print("process exp")
        else:
            print("no exception")
        print('exit')
        return True


with Player() as player:
    print('player with')
    print(player)

注意以下幾點

  1. with語句執行時會自動調用類的__enter__方法。

  2. with語句player 為類中__enter__方法的返回值,這里為player對象本身self

  3. with語句執行結束后會調用類的__exit__方法,可以用來釋放資源。

  4. 如果with語句中出異常,則執行__exit__。其中的三個參數會接收到異常信息。如果最終返回true,則意思為異常處理結束。返回false則繼續拋出。