class A(object):
def __enter__(self):
return '%s is good' % self
def __exit__(self, exc_type, exc_val, exc_tb):
if exc_type == ZeroDivisionError:
print(exc_val)
print(exc_tb)
return True
elif exc_type == IndexError:
print("exc_val", exc_val)
print("exc_tb", exc_tb)
return True
with A() as c:
print(c)
a = []
a[0]
"""
<__main__.A object at 0x00000188C99414E0> is good
exc_val list index out of range
exc_tb <traceback object at 0x00000188C9947D88>
"""
1 先说说__enter__, 这个是入口执行方法, 其实又没有返回值都可以, 不过但要 with as xx 是, 会用到__enter__的返回值, 要是没有返回值, 打印c回时None
2 关于__exit__:
exc_type 是错误类型, exc_val是错误信息, exc_tb是错误的异常的位置
return True:则表示这个异常被忽略。
return None, False 等则这个异常会抛出。
以上です。