Python错误处理try……except……else

#######Python3实现

在编写代码的过程中,通常会出现一些“意外”错误,那么你不得不仔细的,认真的去重新阅读你的代码(虽然可能找不到错误),但是有时候错误是由用户造成的,那么你不得不修改你的代码,有些错误是可以预知的,下面举个简单的栗子

####请输入一个数并让该数对2取余
print(int(input("请输入一个数:")) % 2)

若是输入一个正常的数,那么能得出正确结果,万一有人输入字符串呢,下面看看输出是什么

ValueError: invalid literal for int() with base 10: 'sum'

这是输入字符串时显示的错误,现在开始步入正题,来介绍下错误处理的办法
############################################################
try……except……else #else可以省略
格式:
try:
语句t
except 错误码 as e:
语句1
except 错误码 as e:
语句2
………… #可有多个
else: #可有可无
语句3
作用:用来检测try语句块中的错误,从而让except语句捕获错误信息并处理
逻辑:当程序执行到try-except-else语句时
1:如果当try“语句t”执行出现错误,会匹配第一个错误码,如果匹配到就执行对应"语句"
2:如果当try"语句t"执行出现错误,没有匹配的异常,错误将会被提交到上一层的try语句,或者到程序的最上层
3:如果当try“语句t”执行没有出现错误,执行else语句下的语句3(前提是存在else)

下面继续开始上面那个例子,并进行错误处理

try :
    print(int(input("请输入一个数:")) % 2)
except ValueError as e:
    print("你输入的不是一个数字,请输入一个数字")

out:

请输入一个数:sum
你输入的不是一个数字,请输入一个数字

Process finished with exit code 0

这段代码就能很好地避免用户输入的数据和你想要的数据不符的情况,下面我们来解读下上段代码
try后面的跟的语句先进行执行,如果出现错误,和except中的错误类型进行比对,如果存在这个错误(即错误类型就是except后面的错误),就执行except里面的语句。就是先让他执行,如果有错误再进行比对

except还可以写多个错误,只要有一个比对成功,就执行该语句

except(ValueError,ZeroDivisionError, NameError):

当try中语句无错误时,会执行else中的语句,当然,else语句可以没有,还用上面的小栗子来给你们看看else的用法

try :
    print(int(input("请输入一个数:")) % 2)
except(ValueError ):
    print("你输入的不是一个数字,请输入一个数字")
else:
    print("##展示else的用法")

下面为输出

请输入一个数:5
1
##展示else的用法

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

try:
    print(3 / 0)
except BaseException as e:
    print("异常1")
except(ZeroDivisionError):
    print("异常2")

输出

异常1
//如果把两个except交换位置,会输出异常2,因为程序从上而下执行

这个例子的错误类型为ZeroDivisionError,分母不能为0,但是这个错误码在BaseException里面,即这个错误囊括了大部分错误,而ZeroDivisionError相当于它的儿子或者孙子,BaseException相当于许多错误码的集合,即这个错误为最基本的错误
但是请注意:::: 内存溢出的错误无法跳过
#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("出现了异常")

错误在fun1中,但是通过main就可以捕获到
out:

出现了异常

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
另一种错误处理
try……except……finally
格式:
try:
语句t
except 错误码 as e:
语句1
except 错误码 as e:
语句2
…………
finally:
语句f
作用:语句t无论是否有错都执行最后的语句f,有错的话先执行except,再执行finally(可以不写finally,就像上面的else一样)
pps::第一次写博客,要是有什么不足或者不对的地方,麻烦提提意见,我会改正的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值