#异常介绍
'''
try/except
捕捉引起的异常并恢复
try/finally
无论异常是否发生,都执行
raise
手动触发异常
assert
有条件的在畅叙代码中触发异常
with/as
实现环境管理器
'''
#1
try:
a = 1
# a = 0
assert a ,'有条件引发异常'
except KeyError as e :
print(e)
else: # 没有发生异常时执行
print('ok')
class Bad(Exception):
print('用户自定义异常')
#2
try:
q=1
raise Bad() # 手动引发异常
except Bad:
print('捕获自定义异常')
finally: # 总会执行
print('finally ...')
#3 with/as 运行一个对象的环境管理逻辑,来确保终止行为的发生,with代码块之后会自动关闭文件
# with open('text.txt','w') as file:
# file.write('hello')
'''
with语句实际工作方式
计算表达式
所得到的对象称为环境管理器,必须__enter__和__exit__方法
环境管理器的__enter__方法会被调用,as存在,
返回值会赋值给as中的变量,
代码块中嵌套的代码会执行
with代码发生异常
__exit__方法就会被调用,带有异常的细节
此方法返回值为假,异常会重新引发,否则异常终止
with没有引发异常,__exit__方法依然调用
'''
#4
print('------4--------')
class TraceBlock:
def message(self,arg):
print('runing ',arg) #2
def __enter__(self):
print('starting with block')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
if exc_type is None:
print('exited normally\n')
else:
print('raise an exception ', exc_type)
return False
with TraceBlock() as action:
action.message('test 1') #1 3
print('reached') #4
with TraceBlock() as action:
action.message('test 2')
raise TypeError # 执行exit
print('not reached')
'''
基于类的异常
提供类型分类,对以后的修改有更好的支持
附加状态信息
支持继承
BaseException 顶级类
Exception 顶级类的直接子类
ArithmeticError 数值错误了的超类
'''
#5
'''
try嵌套
try运行时将try语句放入堆栈
异常发生时
会回到最近进入、具有相符except分句的try语句
错误时异常
异常不都是错误
raise定义的异常也不是错误
'''
python异常,了解一下
最新推荐文章于 2024-05-06 10:00:00 发布