1. 编程学习网 > 编程教程 > Python教程 > python异常处理

python异常处理

异常处理
知道了各种异常,我们接下来就要对它们进行处理。

1.try-except 语句

try-except语句是异常处理最基本的方式,语法如下:

其执行流程是,从try语句开始,先执行try下面的程序代码块,如果检测到错误,则会让except语句捕获异常信息,然后将其进行处理。也就是说我们需要将可能会发生异常的语句放在try语句下的代码块中,try会对他们进行监控,在程序执行是,如果这些被监控的代码语句没有发生任何异常,那么将会跳过except语句下的代码快,直接去执行后续代码;如果try中被监控的代码出现了异常,那么程序会从try代码块中遇到异常的那一行代码开始跳过try中后续代码,直接去执行except代码块内对异常的处理语句。整个try-except结束后,执行后续代码。
比如,我们可以用try-except处理一下除0异常。

输出结果:
开始检测代码异常...
代码中有不合法的除0操作
try-except结束
 
可以看到,try语句里的程序第一行正常输出后,第2行遇到了ZeroDivisionError,通过上一节的演示我们知道,如果没有try-except语句,那么程序在执行到这行代码时,一定会将这个错误报出来,并终止程序的运行,而这里,程序并没有被终止,而是跳过出错代码块中的后续代码(第4行),直接去执行except中的语句,也就是输出提示语句“代码中有不合法的除0操作”,这句结束也意味着try-except结构结束,然后程序继续执行后续代码。
 
我们还可以对except语句做扩展。
通过上例代码的演示,相信各位对异常处理有了基本的认识,python很接近自然语言,我们看这个结构,可以清楚的感受到,上面语句的含义,即尝试执行(try)一段代码(try内的代码块),除此之外(尝试执行的代码有错,即except)执行一段代码(except内的代码)。
实际上except语句还可以扩展,比如上例中我们可以按照这样的想法:尝试执行一段代码,除了xx异常。python中可以支持这样的想法,上例中因为我们事先预判到程序会发生的异常为ZeroDivisionError,所以可以这样写。

输出结果:
division by zero
 
即将这个异常找出来然后输出,其中我们可以使用as关键字来简化异常的名字为e,然后将e输出,可以看到输出的结果是对这个错误的描述。
当然了如果这里except的不是ZeroDivisionError,而是其他异常比如NameError,那么异常处理是解决不了的,因为try语句块里没有这个异常,这时就有人可能会说那还不如不在except后面写这些东西,如果你不需要异常信息当然是可以的,但是如果你想了解try里面执行的代码的异常信息时,就不得不写了。
那如果我不能预测try里面的异常信息,还想查看它们怎么办呢?
python里面有一个BaseException,他是所有异常的基类,所以我们可以借助它来代替所有异常信息。

输出结果:
division by zero
<class 'ZeroDivisionError'>
 
如此就可以知道被监控区域的异常信息和异常类型了。

2.异常处理应用

在我们oj题库里面python的样例里面就是异常处理的应用,针对的题目是题库1000。
题库1000:输入两个整数a和b,计算a+b的和
注意此题是多组测试数据
 
这个题目很简单。python只需要三行代码就可以AC这个题目


但是我们的样例中却偏偏要给这段代码加上一个try-except异常处理,如果仅仅从解题的目的去考虑,完全没有必要,但是如果是实际开发,那么加上异常处理就太有必要了。
我们知道python里面的input()函数会将接受的任何内容以字符串的形式表示,即使是我们输入的数字,也是字符串,所以该程序中先对输入进行处理,将输出的字符串数字转为整数,但是实际开放中,你希望用户在输入时完全按照你的想法去做,是很困难的,比如这里,有人就偏偏不输入数字,而是输入任意一段字母,那么map函数无法将这段字母字符串转换成int类型,程序就会崩溃,比如我们在做一个登录系统的时候,需要用户输入用户名。所以,这里加上异常处理是非常重要的,也就是我们的经典的python代码样例。


如此可以保护程序正常运行。

本文由IT教学网整理发布,转载请注明出处:http://www.itjx.com/jiaocheng/Python/2020/0118/542.html

联系我们

在线咨询:点击这里给我发消息

咨询电话:400-998-2681

工作时间:7*24小时无休