无字天书之Python第十一页(异常处理)

博客目录

在这里插入图片描述

传送门

无字天书之Python第一页
无字天书之Python第二页
无字天书之Python第三页
无字天书之Python第四页
无字天书之Python第五页
无字天书之Python第六页
无字天书之Python第七页
无字天书之Python第八页
无字天书之Python第九页
无字天书之Python第十页

正文

前面我们已经写了这么多示例代码了,对于报错信息各位同学可能都已经司空见惯了,今天我们就来聊一下报错信息的处理。
首先,程序在运行的过程中,产生了异常,这时,我们可能会有两种想法,第一种是针对这个异常做某些特殊的处理来进行程序的降级处理;第二种是希望程序忽略这个异常继续执行下去,这个异常可能并不干扰主逻辑的执行。

那这个时候我们怎么办呢?

有编程经验的同学马上就想到了,那我们去 try 它啊,在 Python 中,我们同样可以去 try 它,从字面意思上理解就已经非常清晰明确了,以下的内容是要尝试执行的。

语法

try:
    ...(可能产生异常的代码)
except:
    ...(产生异常后的处理代码)

但是,还会有一种情况,不管上面的代码有没有出错,有一部分代码我们总希望它能执行,这时,我们可以添加另一个关键字 finally 。

从字面意思可以就可以看出来,这个是最后要执行的意思。

语法

try:
    ...(可能产生异常的代码)
except:
    ...(产生异常后的处理代码)
finally:
    ...(一定要执行的代码)

拟定场景:我们定义一个除法函数,如果除数不为 0 ,是可以正常返回值的,如果除数为 0 ,那么整个程序肯定会直接异常报错。

def chufa(x,y):
    try:
        return x / y
    except:
        print('错误')
        return None
print(chufa(15,5)) #3.0

结果为:3.0
这个时候程序是正常输出的,这时我们修改参数

print(chufa(15,0)) #错误 None

结果为:错误 None
可以看到,这里打印了我在程序中设置的 None ,并没有之前的红色的异常信息抛出。这里的 except 会捕捉我们所有的异常信息,但是,异常信息也是有很多分类的,比如我们之前遇到过的访问字典中不存在的 key 的异常 KeyError ,比如我们刚才捕捉到的 ZeroDivisionError 异常,还有也是我们之前遇到过的数组下标越界的异常 IndexError

比如这里的代码我可以捕捉更加详细的异常信息 ZeroDivisionError

def chufa(x,y):
    try:
        return x / y
    except ZeroDivisionError:
        print('错误')
        return None

print(chufa(15,5)) #3.0
print(chufa(15,0)) #错误 None

结果一样
那么,看到这里,你可能会有一个疑问,我们为什么要对异常分类,直接抓取所有异常不是更方便么?

当然,对于逻辑比较简单的程序,直接捕捉所有异常是更方便的,但是在某些特定的业务场景下,一段程序可能会抛出多种异常,我们希望根据异常种类的不同,定制不同的解决方案,至少我们知道当前的程序是抛出了什么异常,这时,程序异常分类就显得尤为重要。
在这里插入图片描述
我们这里演示一下,如果我们输出的值不是数字,是字符串的话。。。。

def chufa2(x,y):
    try:
        return x/y
    except ZeroDivisionError:
        print('输入的除数为0!')
        return None
    except TypeError:
        print('类型错误!')
        return None
print(chufa2('only老K',0))

结果:

类型错误!
None

对的,你没有看错,异常信息是能捕捉多个的,是可以并排写的。至于先抛出那个,就要看那个异常先发生了。
上面我们还提到了 finally ,我们接着来演示 finally 这个关键字的使用。

def chufa3(x,y):
    try:
        return x/y
    except ZeroDivisionError:
        print('您输出的除数为 0 !!!')
        return None
    except TypeError:
        print('您输出的参数类型非法!!!')
        return None
    finally:
        print('only老K,我为自己带盐')

print(chufa3(15,3))
print(chufa3('only老K',0))

结果:

only老K,我为自己带盐
5.0
您输出的参数类型非法!!!
only老K,我为自己带盐
None
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值