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则继续抛出。