python-guide
python-guide copied to clipboard
c06/c06_05
可以,非常好,用到再说
这样的话,我以后再也不用 try except 捕异常了,只用上下文管理器了
class Resource():
def __enter__(self):
print('上下文管理器打开了')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
# 异常由 __exit__ 处理,当发生异常时:
# exc_type 是异常类型
# exc_val 是异常值
# exc_tb 是错误栈信息
# 若返回 True,则表示异常已被处理,不会抛出任何异常
# 若返回 False,则当发生异常时,会抛出
# 可以判断异常类型,进行处理
if exc_type == None:
print('未发生异常,上下文管理器正常关闭')
return True
elif exc_type == ZeroDivisionError:
print(f'发生错误,除零:{exc_val}')
return True
elif isinstance(exc_val, FileNotFoundError):
print('发生错误,文件不存在:{exc_val}')
else:
# 最后返回一个 False,当遇到其它类型错误时,会抛出
# 它和 raise exc_val 是等价的
return False
with Resource() as res:
1 / 0
open('not_exist.txt')