"""
语法:
with Expression [as variable]:
"do sth."
Expression 实际上是实现了 __enter__ 和 __exit__ 方法的对象
也就是说, 只要对象实现了这两个方法, 就可以这样使用
也可以将 __exit__ 理解为 try...finally 中 finally 部分的代码, 无论如何都会在最后执行
"""
class Y:
def __enter__(self):
print("enter")
def __exit__(self, exc_type, exc_val, exc_tb):
# exc_type 错误类型
# exc_val 错误提示
# exc_tb 错误 traceback
# 如果实际执行的代码没有问题, exc_type, exc_val, exc_tb 为 null
# 如果有问题, 会对应赋值
print("errType: %s, errVal: %s, errTb: %s" % (exc_type, exc_val, exc_tb))
print("exit")
if __name__ == '__main__':
with Y() as r:
# 先执行 __enter__()
# 本例中会打印 enter
# 实际执行代码的位置, 这里手动抛出错误
raise TypeError("类型错误")
# 执行 __exit__()
# 本例中会打印
# errType: <class 'TypeError'>, errVal: 类型错误, errTb: <traceback object at 0x7ff7292eb410>
# exit
Python学习 之 with...as...
最新推荐文章于 2024-03-04 11:34:20 发布