python系列文章目录
python基础(01变量&数据类型&运算符)
python基础(02序列共性)
python基础(03列表和元组)
python基础(04字符串&字典)
python基础(05集合set)
python基础(06控制语句)
python基础(07函数)
python基础(08类和对象)
python基础(09闭包&装饰器)
文章目录
- python系列文章目录
- 前言
- 一、引导问题
- 二、结构
- 1.try...一个except结构
- 2.try...多个except结构
- 3.try...except..else结构
- 4.try...except..else..finally结构
- 三.常见异常
- 四.自定义异常类
- 总结
前言
本文主要讲python中的异常处理,一次性说清python中异常处理的用法。相对来说比较好理解,如果你从第一篇文章学到了这里,那么恭喜你,python基础,你已经挑战了自己!
一、引导问题
- python中,引进了很多类用来描述和处理异常的类,叫异常类
- BaseException 所有异常的父类
- exception 所有异常的基类
- IOError:打开不存在的文件
- IndexError:不存在的索引
- keyError:字典中,用不存在的key
- NameError:找不到变量名
- SyntaxError:代码语法错误
- 异常也采用对象的方式来处理,处理过程:1、抛出异常 2、捕获异常
二、结构
1.try…一个except结构
代码语法:
- try:包含可能引发异常的代码 except:用来捕捉和处理发生的异常 如果try没引发异常,跳过- except块继续执行后续代码
- 如果try发生了异常,跳过try块中的后续代码,跳到相应的except块中处理异常,处理完,继续执行后续代码
- e:产生的异常原因
try:
被监控的可能引发异常的语句块
except BaseException[as e]:
异常处理语句块
例子1:
try:
print("step1")
a=3/0
print("step2")
except BaseException as e:
print("step3")
print(e)
print("后续代码")
-------------------------------
step1、step3、异常信息、后续代码
例子2:
题目:循环输入数字,不是数字抛出异常,处理异常,输入88,结束循环
//简单实现
while True:
x=int(input("请输入一个数字:"))
if x==88:
print("结束循环")
break
//异常信息实现
while True:
try:
x=int(input("请输入一个数字:"))
if x==88:
print("88结束循环")
break
except BaseException as e:
print(e)
print("循环结束")
2.try…多个except结构
代码语法:
先子类后父类
try:
被监控的 可能引发异常的语句块
except Exception1:
处理Exception1的语句块
except Exception2:
处理Exception2的语句块
......
except BaseException:
处理可能遗漏的异常的语句块
例子:
try:
a=input("请输入一个被除数:")
b=input("请输入一个除数:")
c=float(a)/float(b)
print(c)
except ZeroDivisionError:
print("异常:不能除以0")
except ValueError:
print("异常:不能将字符串转化成数字")
except NameError:
print("异常:变量不存在")
except BaseException as e:
print(e)
3.try…except…else结构
解释说明:
如果try块中没抛出异常,则执行else块,如果try抛出异常,则执行except块,不执行else
例子:
try:
a=input("请输入被除数:")
b=input("请输入除数:")
c=float(a)/float(b)
except BaseException as e:
print(e)
else:
print("计算结果是:",c)
4.try…except…else…finally结构
解释说明:
finally无论是否发生异常,都会被执行,通常用来释放try块中申请的资源
例子:
try:
a=input("请输入被除数:")
b=input("请输入除数:")
c=float(a)/float(b)
except BaseException as e:
print(e)
else:
print("计算结果是:",c)
finally:
print("finally都会执行")
print("程序结束")
三.常见异常
1、SyntaxError:语法错误
int a=3
2、NameError:尝试访问一个没有申明的变量
print(a)
3、ZeroDivisionError:除数为0错误(零除错误)
a=3/0
4、ValueError:数值错误
float("jiajia") #字符串没法转化浮点数
5、TypeError:类型错误
123+"abc"
6、AttributeError:访问对象不存在的属性
a=100
a.sayhi()
7、IndexError:索引越界异常
a=[4,5,6]
a[10]
8、KeyError:字典的关键字不存在
a={"name":"jiajia"}
a["abc"]
四.自定义异常类
说明:
- 程序开发中,有时候也需要自己定义异常类,自定义异常类一般都是运行时异常
- 通常继承Exception或者其子类即可,命名一般以Error,Exception
- 自定义异常由raise语句主动抛出
例子:
题目:写一个类 不符合的年龄抛出异常
#方法
class AgeError(Exception): #继承Exception
def __init__(self,errorInfo): #继承这个类的属性
Exception.__init__(self)
self.errorInfo=errorInfo
def __str__(self):
return "年龄错误"```
#测试代码
if __name__=="__main__": #如果为true,则模块是作为独立文件运行,可以执行测试代码
age=int(input("输入一个年龄:"))
if age<1 or age>150:
raise AgeError(age)
else:
print("正常年龄")
#测试结果
输入一个年龄:200
Traceback (most recent call last):
File "D:\ody\study\python\code\code2\5.01.py", line 211, in <module>
raise AgeError(age)
__main__.AgeError: 年龄错误
总结
本文比较好理解,欢迎评论区交流,后续持续更新。