2021-04-17

异常处理

程序在执行过程中产生的错误为异常,如:列表索引越界,打不开不存在的文件等。
print (a)
open(“123.txt”,“r”)

这个程序运行错误:
1.NameError:描述信息为a没有定义
2.FileNotFoundError:描述信息为没有找到123.txt文件

异常类
在python 中,所有异常类都是Exception的子类
1.NameError
尝试访问一个未声明的变量,会引发NameError

2.ZeroDivisionError
当除数为0时,会引发异常。
在这里插入图片描述
事实上,任何数值被零除都会导致上述异常

3.SyntaxError
当解释器发现语法错误时,会引发异常。
demo_list = [“a”, “b”, “c”]
for i in demo_list
print(i)

上述示列,由于for循环的后面缺少冒号,所以导致程序错误。
SyntaxError异常是唯一不在运行时发生的异常,这些错误一般在编译时发生,解释器无法把脚本转换为字节代码。

4.IndexError
当使用序列中不存在的索引时,会引发异常。
demo_list = [ ]
demo_list[0]

上述示列,demo_list 列表中没有任何元素,使用索引0访问列表首位元素时,会有错误:
IndexError:list index out of range
上述信息表明,列表的索引值超出了列表的范围

5.KeyError
当使用字典中不存在的键访问值时,会引发KeyError异常。
dictionary = {“host”: “earth”, “port”:80}
dictionary [“server”]

上述信息表明:出现了字典中没有的键server

6.FileNotFoundError
试图打开不存在的文件时,会引发异常。

7.AttributeError
当尝试访问未知的对象属性是,会引发异常。
class Car(object ):
pass
car = Car()
car.color = “黑色”
print(car.color)
print(car.name)

上述,Car类没有定义任何属性和方法,在创建Car类实例以后,动态的给car引用的实例添加了color属性,然后访问它的color和name属性时,出现错误。

异常处理
try语句用于检测异常,except 语句用于捕获异常。

捕获简单异常
try-except语句格式如下:
try:
#语句块
except :
#异常处理代码
当try里面的某条语句出现错误时,程序将不再继续执行try中的语句,而直接执行except 里处理异常的语句。
在这里插入图片描述
捕获多个异常
如果输入的为非数字类型的值,就会产生另一个数值错误的异常。
try:
#语句块
except 异常名称1:
#异常处理代码
except 异常名称2:
#异常处理代码

在这里插入图片描述
如果一个except 子句想要捕捉多个异常,并且使用同一种处理方式,python 2中可以在except 的后面使用逗号连接多个异常名称;在python 3 必须使用元组来表示。

捕获异常的描述信息
在这里插入图片描述
valueerror表示:当方法接收正确数据类型但值不适合的参数时,将引发python 中valueerror异常。
在这里插入图片描述
为了区分不同的错误信息,可以使用as获取系统反馈的错误信息。
当监控到ZeroDivisionError或者ValueError这两种异常中的任意一个时,就会把描述信息保存到result变量中。

捕获所有异常

可以在except 语句后使用Exception类表示所有异常,该类是所有异常类的父类。
在这里插入图片描述
except 语句跟着一个Exception类的对象result,它用于接收异常的描述信息。由于程序已经处理了所有可能产生的异常,所以不再出现非正常退出的情况。

没有捕获到异常
如果try语句没有捕获到任何的错误信息,就不再执行任何except 语句,而是执行else语句。

终止行为
有一种情况是,无论是否捕捉到异常,都要执行一些终止行为,比如:关闭文件,释放锁等。可以使用finally 语句进行处理。
在这里插入图片描述

抛出异常
1.raise语句:能显式的触发异常,
在这里插入图片描述
2.使用类名引发异常
当raise语句指定异常的类名时,会创建该类的实例,然后引发异常。
raise IndexError

3.使用异常类的实例引发异常
index_error = IndexError()
raise index_error
4.传递异常
5.指定异常的描述信息
6.异常引发异常

assert语句
在这里插入图片描述
自定义异常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值