python中的异常处理

一、什么是异常处理?

异常就是使用异常对象来表现异常,若程序在编译或执行过程中,发生一些错误,程序的执行过程会发生改变,抛出异常对象,就会进入异常处理。若没有异常处理,那么将会终止在当前异常处,后面的代码将不会在继续执行
常见的异常错误
这里写图片描述

二、python中的异常种类



1、NameError:尝试访问一个未申明的变量
>>>  v
NameError: name 'v' is not defined

2、ZeroDivisionError:除数为0
>>> v = 1/0
ZeroDivisionError: int division or modulo by zero

3、SyntaxError:语法错误
>>> int int
SyntaxError: invalid syntax (<pyshell#14>, line 1)

4、IndexError:索引超出范围
>>> List = [2]
>>> List[3]
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    List[3]
IndexError: list index out of range

5、KeyError:字典关键字不存在
>>> Dic = {'1':'yes', '2':'no'}
>>> Dic['3']
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    Dic['3']
KeyError: '3'

6、IOError:输入输出错误
>>> f = open('abc')
IOError: [Errno 2] No such file or directory: 'abc'

7、AttributeError:访问未知对象属性
>>> class Worker:
 def Work():
  print("I am working")

>>> w = Worker()
>>> w.a
Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    w.a
AttributeError: 'Worker' object has no attribute 'a'

8、ValueError:数值错误
>>> int('d')
Traceback (most recent call last):
  File "<pyshell#54>", line 1, in <module>
    int('d')
ValueError: invalid literal for int() with base 10: 'd'

9、TypeError:类型错误
>>> iStr = '22'
>>> iVal = 22
>>> obj = iStr + iVal;
Traceback (most recent call last):
  File "<pyshell#68>", line 1, in <module>
    obj = iStr + iVal;
TypeError: Can't convert 'int' object to str implicitly

10、AssertionError:断言错误
>>> assert 1 != 1
Traceback (most recent call last):
  File "<pyshell#70>", line 1, in <module>
    assert 1 != 1
AssertionError

三、异常处理的基本语法格式

1、在程序开发中,如果对某些代码的执行不确定(程序的语法无法正确)

try的工作原理:

执行一个try语句时,python解析器会在当前程序流的上下文中作标记,当出现异常后,程序流能够根据上下文的标记回到标记位,从而避免终止程序。
1. 如果try语句执行时发生异常,程序流跳回标记位,并向下匹配执行第一个与该异常匹配的except子句,异常处理完后,程序流就通过整个try语句(除非在处理异常时又引发新的异常)。
2. 如果没有找到与异常匹配的except子句(也可以不指定异常类型或指定同样异常类型Exception,来捕获所有异常),异常被递交到上层的try(若有try嵌套时),甚至会逐层向上提交异常给程序(逐层上升直到能找到匹配的except子句。实在没有找到时,将结束程序,并打印缺省的错误信息)。

可以增加try来捕获异常

try:
尝试执行的代码
expect:
出现错误的异常处理

实例:

这里写图片描述
结果显示
由下图片可以看出,若输入正确,那么直接打印出一串,若输入的数不是整型,那么,将会进入异常处理阶段,之后在打印出一串3
这里写图片描述

2、两种异常处理处理格式

try:
尝试执行的代码
expect:
出现错误的异常处理1
expect:
出现错误的异常处理2

实例

需求

1.显示用户输入一个整数
2.使用10除以用户输入的整数并且可以输出
3.若输入的数不是整数,那么转向异常处理
这里写图片描述
若输入的数的类型正确,那么结果显示如下图所示
这里写图片描述
若输入的数的类型不正确,那么结果如下图
这里写图片描述
若输入的数为0,结果显示如下
这里写图片描述

捕获未知错误

在开发的时候,要判断所有可能出现的错误,是有一定的难度,
如果希望程序无论出现任何错误,都不会因为python解释器抛出异常而终止,
可以再增加一个except

实例

这里写图片描述
结果显示
这里写图片描述

3、try …except…else…finally基本格式

try
#尝试执行的代码
pass
except 错误类型1:
pass
expect Exception as result:
else:
#没有异常处理才会执行的代码
finally:
#无论是否有异常,都会执行的代码
pass

实例

这里写图片描述
结果显示
输入的数为整数,显示成功
这里写图片描述
若输入的类型不正确,那么将进行异常处理,输出请输入正确的整数
这里写图片描述
若输入为0,那么 输出未知错误额信息
这里写图片描述

4、异常处理中的函数

这里写图片描述
若输入的数为整数时,那么输出的是你所要输入的数
这里写图片描述
若输入的数不正确,那么将会出现以下的错误
这里写图片描述

5、异常的传递

异常的传递–当函数/方法出现异常,会将异常传递给函数/方法调用的一方,如果传递到主程序,依旧没有异常处理,程序才会终止,可以在主程序中增加异常捕获,而在主函数中调用其他函数,只要出现异常,都会传递到主函数的异常,捕获中,这就不需要在代码中,增加大量的异常捕获,都能够保持代码的整洁
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

综合案例

需求:
判断用户输入的密码
1.<8 错误
2.>=8 返回输入的密码

这里写图片描述
如果密码长度不够,那么输出密码长度不够的结果信息
这里写图片描述
如果密码长度一致,那么输出密码
这里写图片描述

6、触发异常raise

raise关键字后跟异常的名称,异常名称能够标识出异常类的对象。执行raise语句时,python会创建指定异常类的对象,还能够指定对异常对象进行初始化的参数,参数也可以为由若干参数组成的元组。
注意:一旦执行raise语句,程序就会被终止。
格式:raise [exceptionType[,argument][,traceback]]

这里写图片描述
结果显示
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值