专栏名称: 极客挖掘机
高级软件工程师
目录
相关文章推荐
吉林教育  ·  吉林省春季开学“家长第一课”举办 ·  昨天  
微观三农  ·  农业农村部部署做好春耕化肥保供工作 ·  2 天前  
黑龙江省教育厅  ·  新增!我省设立一所职业学校——哈尔滨商贸职业学院 ·  2 天前  
桦爸聊升学  ·  广东这所公办本科高校首招“3+证书本科” ·  3 天前  
桦爸聊升学  ·  广东这所公办本科高校首招“3+证书本科” ·  3 天前  
51好读  ›  专栏  ›  极客挖掘机

小白学 Python(19):基础异常处理

极客挖掘机  · 掘金  ·  · 2019-11-12 01:03

正文

阅读 0

小白学 Python(19):基础异常处理

人生苦短,我选Python

前文传送门

小白学 Python(1):开篇

小白学 Python(2):基础数据类型(上)

小白学 Python(3):基础数据类型(下)

小白学 Python(4):变量基础操作

小白学 Python(5):基础运算符(上)

小白学 Python(6):基础运算符(下)

小白学 Python(7):基础流程控制(上)

小白学 Python(8):基础流程控制(下)

小白学 Python(9):基础数据结构(列表)(上)

小白学 Python(10):基础数据结构(列表)(下)

小白学 Python(11):基础数据结构(元组)

小白学 Python(12):基础数据结构(字典)(上)

小白学 Python(13):基础数据结构(字典)(下)

小白学 Python(14):基础数据结构(集合)(上)

小白学 Python(15):基础数据结构(集合)(下)

小白学 Python(16):基础数据类型(函数)(上)

小白学 Python(17):基础数据类型(函数)(下)

小白学 Python(18):基础文件操作

前面我们已经写了这么多示例代码了,对于报错信息各位同学可能都已经司空见惯了,今天我们就来聊一下报错信息的处理。

首先,程序在运行的过程中,产生了异常,这时,我们可能会有两种想法,第一种是针对这个异常做某些特殊的处理来进行程序的降级处理;第二种是希望程序忽略这个异常继续执行下去,这个异常可能并不干扰主逻辑的执行。

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

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

语法:

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

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

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

语法:

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

下面开始我们今天的代码演示。

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

def division(x, y):
    try:
        return x / y
    except:
        print('程序报错啦!!!')
        return None

print(division(15, 5))复制代码

输出结果如下:

3.0复制代码

这时程序是可以正常输出的,这时我们修改一下调用的参数,改为 division(15, 0) ,看下输出结果:

程序报错啦!!!
None复制代码

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

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

def division1(x, y):
    try:
        return x / y
    except ZeroDivisionError:
        print('程序报错啦!!!')
        return None

print(division1(15, 0))复制代码

输出结果如下:

程序报错啦!!!
None复制代码

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

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







请到「今天看啥」查看全文