12、异常处理


#需求:当程序遇到问题时,不让程序结束,而越过错误继续向下执行

'''
try......except......else

格式:

语句t:

except 错误码 as e:
语句1

except 错误码 as e:
语句2

......

except 错误码 as e:
语句n

else:
语句e

注意:else 语句可有可无

作用:用来检测try语句块中的错误,从而except语句捕获错误信息并处理

逻辑:当程序执行到try-except-else语句时

1、如果当try "语句t"执行出现错误,会匹配第一个错误码,如果匹配上就执行对应"语句"

2、如果当try "语句t"执行出现错误,没有匹配的异常,错误将会被提交到上一层的try语句,或者到程序的最高层

3、如果当try "语句t"执行没有出现错误,执行else下的"语句e"(你的有)



'''


try:
print(3/1)
#print(num)
except NameError as e:
print("没有该变量")

except ZeroDivisionError as e :
print("除数为0了")

else:
print("代码没有问题")

print("***********")


#使用except而不使用任何的错误类型

try:
# print(4 / 0)
print(num)
except:
print("程序出现了异常")

#使用except 带着多种异常

try:
print(5 / 0)
except (NameError,ZeroDivisionError):
print("出现了NameError 或 ZeroD")



#特殊

#1、错误其实是class(类),所有的错误都继承自 BaseException,所以在捕获的时候,他捕获了该类型的错误,还把子网一网打尽

try:
print(5 / 0)

except BaseException as e:
print("异常1")
except ZeroDivisionError as e:
print("异常2")


#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


式:

语句t:

except 错误码 as e:
语句1

except 错误码 as e:
语句2

......

except 错误码 as e:
语句n

finally:
语句f


作用:语句t无论是否有错误都将执行最后的语句f

'''

try:
print(4 / 0)

except ZeroDivisionError as e:

print("为0了")

finally:
print("必须执行我")


'''
断言:


'''


def func(num, div):

assert (div != 0),"div 不能为0"

return num / div

print(func(10, 0))
posted @ 2020-02-18 16:03  步行-天下  阅读(24)  评论(0)    收藏  举报