错误与异常

异常:程序运行时发生错误的信号

引发异常的错误
异常的追踪信息,异常类,异常值

python中的异常种类

在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)取标识,不同的类对象标识不同的异常,一个异常标识一种错误

AttributeError	试图访问一个对象没有的类型,例如foo.x,但foo没有该属性
IOError	输入/输出异常,基本上是打不开文件
ImportError	无法引入模块或包,基本上是路径问题或者名称错误
IndentationError	语法错误,代码没有正确对齐
IndexError	下标索引超出序列边界,比如当x只有3个元素却要访问x[5]
KeyError	试图访问字典中不存在的键
NameError	使用一个还未赋值的变量,比如a,当程序中未定义变量a
SyntaxError	python代码非法,代码不能编译
TypeError	传入对象类型与要求的不符合
UnboundLocalError		试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError	传入一个调用者不期望的值,即使值的类型是正确的

异常处理

1.1 什么是异常处理
编写特定的代码,专门用来捕捉异常(代码与程序逻辑无关,与异常处理有关)
如果捕捉成功则进入另一个处理分支,执行你为其定制的逻辑,使程序不会崩溃。
1.2 如何进行异常处理
python为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行 异常处理(if 也可以进行异常处理,只不过对于不同代码段的同一段异常需要重复写多分支的 if,写多了程序可读性就差)
part1:基本语法

try:
    被检查的代码块
except 异常类型:
    try中一旦检测到异常,就执行这个位置的逻辑

其中,异常类型只能处理指定的异常

part2:万能异常

    try:
        age = input('>>')
        int(age)    #主逻辑
    except Exception as e:
        print('错误===>',e)

part3:多分支

try:
    被检查的代码块
except KeyError as e:
    try中一旦检测到异常,就执行这个位置的逻辑
except ValueError as e:
	print('---->',e)
except Exception as e:
	print('出现异常',e)

异常的其他结构

try:
    被检查的代码块
except KeyError as e:
    try中一旦检测到异常,就执行这个位置的逻辑
except ValueError as e:
	print('---->',e)
else:
	print('try 内代码块没有异常则执行我,有异常不会执行')
finally:
	print('无论异常与否都会执行,通常是进行清理工作')

自定义异常

class YueException(BaseException):
    def __init__(self,msg):
        self.msg = msg

raise YueException('==>')

断言

#断言,以下两种方法都可以(判断res1 是不是 1,不是抛出异常)
assert res1 == 1 
#或者
if res1 != 1:
    raise AssertionError

1.3 什么时候用异常处理
try…except 应该尽量少用,因为它本身就是附加给程序的一种异常处理的逻辑,与主要工作没有关系,东西加多会导致代码可读性变差
只有在有些异常无法预知情况下,才应该加上try…except,其他的应该尽量避免

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值