前面我们在学习集合时学到过两个方法,一个是remove(x)方法一个是pop方法,前者是移除集合中的一个元素x,如果x不在集合中返回KeyError异常,后者是删除集合所有元素,如果集合为空则返回KeyError异常。那么什么是异常呢?
异常是可以预见的例外情况,因为可以预见,所以可以采用对应的措施进行防范。而错误是不可避免的,因为错误不可预见,所以也没有对应的处理措施。
异常就好像物理学中的误差一样,误差的来源多种多样,但是却可以规避。
——————————下面我们来看一个例子————————————————
下面这个程序要我们输入一个整数,随后会输出他本身和它的平方
number=eval(input("请输入一个整数:"))
print("您输入的整数为:{},其平方为:{}".format(number,number**2))
我如果输入整数12可以看到程序正常执行
但是我如果输入的不是整数可以看出程序给出了NameError的异常提示
Traceback (most recent call last): #Traceback叫做异常回溯标记
File "D:/python_work/test.py" #叫做异常文件路径
, line 1, in <module> #line后面的数字表示异常发生代码行数
number=eval(input("请输入一个整数:"))
File "" , line 1, in <module>
NameError: #异常类型
name '一个整数' is not defined #异常内容提示
异常中最重要的信息就是异常类型,它决定了我们如何去处理异常,python采用try except语句处理异常,其基本语法格式如下:
try:
语句块1
except 异常类型1:
语句块2
当没有发生异常时程序执行tyr后的语句块1,发生异常时根据异常类型执行相应语句块
——————————————我是例子——————————————————
我们用异常处理机制完善了刚才的代码:
try:
number=eval(input("请输入一个整数:"))
print("您输入的整数为:{},其平方为:{}".format(number,number**2))
except NameError:
print("输入错误!请重新输入")
以上是异常的基本用法,除了基本用法以外还有较为高级的异常用法我们接下来就看一看
try :
语句块1
except 异常类型1:
语句块2
…
except 异常类型n:
语句块n+1
except:
语句块n+2
其中第一到第n个except语句都指明了异常类型及处理方法,最后一个except语句没有指定任何异常类型,表示它可以处理所有上述语句处理不成的其他异常。是不是觉得很相似呢,对没错,这个过程和if—elif—else语句类似。因此我们编写异常处理代码时通常把一些特定的异常写入except后面,把一些范围更大的异常往后写。
————————————举个小例子———————————————————
就像我们玩植物大战僵尸一样,气球僵尸只能用仙人掌和三叶草来对付,通常一出现气球僵尸时我们就会放致三叶草或仙人掌,而窝瓜樱桃炸弹(相当于最后一个except语句可以处理任何异常)可以对付任何僵尸,因此经常会留着他们来对付其他僵尸。
除了try和except外python还提供else和finally保留字配合使用,格式如下:
try:
语句块1
except 异常类型1:
语句块2
else :
语句块3
finally:
语句块4
else后的语句只有当try语句块正常执行结束且没有发生异常时才会执行。finally语句无论try语句块是否发生异常都会执行。
————————————举个例子吧———————————————————
我们坐着驾校的车去考场考科二,当我们科二合格后可以去考试大厅打印成绩单,最后都会坐驾校的车回到驾校。(可以理解为:try中的语句块正常执行相当于科二考试成功,此时else后的语句块正常执行可以理解成考试合格后去打印成绩单,但最后无论你合格不合格驾校的车都会把你拉回去可以理解成无论try中的语句块是否正常执行都会执行finally后的语句块。
————————————我是最后一个例子————————————————
try:
num=eval(input("请输入科目二考试分数:"))
num=100
except NameError:
print("考试不合格")
num=0
else:
print("考试合格,成绩单已打印成功")
finally:
print("学员已全部考试完毕,开车返回驾校")
这里我们把输入整数抽象成考试合格,输入其他类型抽象成考试不合格
下面是测试结果:
祝大家考试都一把过⊂(˃̶͈̀ε ˂̶͈́ ⊂ )
告辞,下次见咯