class Foo:
def __init__(self,name):
self.name=name
def __enter__(self):
print('执行enter')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('执行exit')
print(exc_type)#输出错误类型
print(exc_val) #输出错误值
print(exc_tb) #输出错误追踪信息
with Foo('a.txt') as f:#调用__enter__,相当于f=obj.__enter__()
print(f)
print(f.name)
print(a) #这里出错会立即执行__exit__,打印出错误,程序会立即终止,下面的代码将不会执行
print('------')
print('******')
print('这是最后一行')
#输出
'''
执行enter
<__main__.Foo object at 0x00000202EDFB3EB8>
a.txt
执行exit
<class 'NameError'>
name 'a' is not defined
<traceback object at 0x00000202EDFBB748>
Traceback (most recent call last):
File "E:/python3.6/three.py", line 16, in <module>
print(a)
NameError: name 'a' is not defined
'''
出现错误让程序继续运行
class Foo:
def __init__(self,name):
self.name=name
def __enter__(self):
print('执行enter')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('执行exit')
print(exc_type)#输出错误类型
print(exc_val) #输出错误值
print(exc_tb) #输出错误追踪信息
return True #返回True让程序继续运行
with Foo('a.txt') as f:#调用__enter__,相当于f=obj.__enter__()
print(f)
print(f.name)
print(a) #这里出错会立即执行__exit__,打印出错误,代码块下的将不会执行,而是直接跳出代码块继续往下执行
print('------')
print('******')
print('这是最后一行')
#输出
'''
执行enter
<__main__.Foo object at 0x000001C9211EA198>
a.txt
执行exit
<class 'NameError'>
name 'a' is not defined
<traceback object at 0x000001C9211EB748>
这是最后一行
'''