01-07. 装饰器&偏函数与作用域与异常处理与文件读写04
当程序遇到问题时不让程序结束,而越过错误继续向下执行。
try-except-else
精准的错误类型判断
格式:
try:
语句t
except 错误码 as e:
语句1
except 错误码 as e:
语句2
……
except 错误码 as e:
语句n
else:
语句e
注意:else语句可有可无。
作用:用来检测try语句块中的错误,从而让except语句捕获错误信息并处理。
try:print(3 / 1)except NameError as e:print("没有该变量")except ZeroDivisionError as e:print("除数为0了")else:print("代码没有问题")print("*************")#-->3.0#-->代码没有问题#-->*************
使用except而不使用任何的错误类型
try:
语句t
except:
语句e
try:print(num)except:print("程序出现了异常")
使用except带着多种异常
try:print(5 / 0)except (NameError, ZeroDivisionError):print("出现了NameError或ZeroDivisionError")
特殊
01-07. 装饰器&偏函数与作用域与异常处理与文件读写05
错误其实是class(类),所有的错误都继承自BaseException,所以在捕获的时候,它捕获了所有类型的错误,下一个异常语句不再执行。
try:print(5 / 0)except BaseException as e: #该句捕获错误,下一个异常2不再执行print("异常1")except ZeroDivisionError as e:print("异常2")
跨越多层调用,main调用了func2,func2调用了func1,func1出现了错误,这是只要main捕获到了就可以处理。
def func1(num):print(1 / num)def func2(num):func1(num)def main():func2(0)try:main()except ZeroDivisionError as e:print("****")
try-except-finally
01-07. 装饰器&偏函数与作用域与异常处理与文件读写05
格式:
try:
语句t
except 错误码 as e:
语句1
except 错误码 as e:
语句2
……
except 错误码 as e:
语句n
finally:
语句f
作用:语句t无论是否有错误都将执行最后的语句f。
try:print(1/0)except ZeroDivisionError as e:print("为0了")finally:print("必须执行此语句")#-->为0了#-->必须执行此语句
断言
01-07. 装饰器&偏函数与作用域与异常处理与文件读写06
def func(num, div):assert (div != 0), "div不能为0"return num / divprint(func(10, 0))

