Python异常高级处理,with语句原理,调用时机,环境管理器实现原理

Python异常高级处理,with语句原理,调用时机,环境管理器实现原理

异常(高级)

回顾异常相关的语句:

try-except 用来捕获异常通知

try-finally 用来做一定要做的事情

raise 用来发出异常通知

assert 用来根据条件来发出AssertionError类型的异常通知

with 语句:

语法:

with 表达式1 [as 变量1],表达式2 [as 变量2]:

语句块

作用:

使用对于资源进行访问的场合,确保使用过程中不管是否发生异常,都会执行必须的'清理'操作,并释放资源

如:文件使用后自动关闭,线程中锁的自动获取和释放等

之前操作文件步骤:

try:

f = open('123.txt')

try:

print('正在读取文件')

n = int(f.read())

print('n= ',n)

finally:

f.close()

print('文件已经关闭')

except OSError:

print('文件打开失败')

用 with 语句操作文件:

try:

with open('123.txt') as f:

print('正在读取文件')

n = int(f.read())

print('n= ',n)

print('文件已经关闭') #只要离开with语句,都会关闭文件

except OSError:

print('文件打开失败')

说明:能够用于with语句进行管理的对象必须是环境管理器

环境管理器:

1.类内有__enter__和__exit__实例方法的类被称为环境管理器

2.能够用with语句管理的对象必须是环境管理器

3.__enter__方法将在进入with语句时被调用,并返回由 as 变量管理的对象

4.__exit__将在离开with语句时被调用,且可以用参数来判断在离开with语句时是否有异常发生并做出相应的处理

如:

class A:

def __enter__(self):

print('已进入with语句')

return self #返回的对象将由 as 绑定

def __exit__(self, exc_type, exc_val, exc_tb):

'此方法会在退出with语句时自动调用

exc_type 在没有异常时为None,在出现异常时为异常类型

exc_val  在没有异常时为None,在出现异常时绑定错误对象

exc_tb   在没有异常时为None,在出现异常时绑定traceback对象

'

print('已离开with语句')

with A() as a:

print('这是with语句内的一条语句')


最后编辑于:2019/09/27作者: 牛逼PHP

发表评论