概念
错误分 语法错误 和 异常
运行期检测到的错误叫异常
try:result=3/0print("发生异常了")exceptZeroDivisionErrorase:print(e)except(RuntimeError,TypeError,NameError)ase:print(e)except:print("Unexpected error")else:没有异常时执行的代码finally:无论是否发生异常都会执行的代码print("End")抛出异常
raise
defint_add(x,y):ifisinstance(x,int)andisinstance(y,int):returnx+yelse:raiseTypeError("参数类型错误")print(int_add(1,2))# 3print(int_add("1","2"))# TypeError: 参数类型错误assert 断言
assert用于判断一个表达式,在表达式条件为False的时候触发异常,常用于调试程序。
defint_add(x,y):assertisinstance(x,int)andisinstance(y,int),"参数类型错误"returnx+yprint(int_add(1,2))# 3print(int_add("1","2"))# AssertionError: 参数类型错误自定义异常
通过直接或者间接继承Exception类来创建自己的异常
classMyError(Exception):def__init__(self,value):self.value=valuedef__str__(self):returnrepr(self.value)try:raiseMyError(1)exceptMyErrorase:print("自定义异常:",e.value)with 关键字使用
with语句用于异常处理,封装了try except finally编码范式,提供了一种简洁的方式来确保资源的正确获取和释放,同时处理可能发生的异常,提高了易用性。使代码更清晰、更具可读性,简化了文件流等公共资源的管理。
1 常规方式:
try:file=open("test.txt","w")file.write("aaaa")file.close()finally:print("文件是否关闭:",file.closed)2 使用 try finally
try:file=open("test.txt","w")try:file.write("aaaa")finally:file.close()finally:print("文件是否关闭:",file.closed)3 使用 with
try:withopen("test.txt","w")asfile:file.write("aaaa")finally:print("文件是否关闭:",file.closed)