第十九天 面向对象之异常 |
学习目标:
1、了解异常
2、捕获异常
3、异常的else
4、异常的finally
5、异常的传递
6、自定义异常
文章目录
一、了解异常
(程序运行中的报错提示,控制台输出的红色字体)
异常基本写法
try:
可能发生错误的代码
except:
若出现错误,将执行的代码
体验异常
try:
print(num)
except:
print('啦啦啦') # 啦啦啦
二、捕获异常
捕获指定异常
语法:
try:
可能发生错误的代码
except 异常类型:
若出现错误,将执行的代码
案例:
# 1、捕获特定异常
try:
print(num)
except NameError:
print(f'没有被定义')
# 2、捕获特定/指定异常
try:
print(1/0)
except ZeroDivisionError:
print('ZeroDivisionError出错') # ZeroDivisionError出错
注意:
1、若是尝试执行的代码的异常类型和要捕获的异常类型不一致,无法捕获异常
2、一般try下面只放一行代码
捕获多个异常
语法:
try:
可能发生错误的代码
except (异常类型,异常类型):
若出现错误,将执行的代码
案例:
try:
print(num)
print(1/0)
except (NameError,ZeroDivisionError):
print('有错误')
捕获异常描述信息
语法:
try:
可能发生错误的代码
except 异常类型 as result:
若出现错误,将执行的代码
案例:
try:
print(num)
except NameError as result:
print(result) # name 'num' is not defined
捕获所有异常
语法:
try:
可能发生错误的代码
except Exception:
若出现错误,将执行的代码
代码:
try:
print(num)
except Exception as result:
print(result) # name 'num' is not defined
三、异常的else
else表示没有异常时要执行的代码
try:
print(1)
except:
print('有异常')
else:
print('没有异常')
# 1
# 没有异常
四、异常的finally
无论是否异常都会执行的代码
try:
print(1/0)
except ZeroDivisionError:
print('ZeroDivisionError出错') # ZeroDivisionError出错
else:
print('无错')
finally:
print('执行完毕')
# ZeroDivisionError出错
# 执行完毕
五、异常的传递
课前小知识-命令提示符运行py文件
找到存放此py文件的位置,清空,点击cmd
输入自己python解释器的名,加上想要打开的py文件,使用Tab键补全;回车即可显示
异常传递
异常传递,即异常是可以嵌套书写的
先写外面的异常,再写内层的异常
传递流程:从外层的except传递到内层的except
代码
import time
try:
f = open('test.txt') # 默认只读r
try:
while True: # 循环读取
content = f.readline() # 读取一行
if len(content) == 0:
break
time.sleep(2)
print(content)
except:
print('在cmd中被Ctrl+C意外终止')
except:
print('无法正常打开')
在cmd中,except捕获异常
六、自定义异常
1、自定义异常基本认识
概念:将不符合程序要求的错误反馈给用户
抛出自定义异常的语法:raise 异常类对象
作用:将程序要求的代码,捕获异常,抛出异常类对象
2、自定义异常步骤
1、自定义异常类
2、抛出异常
3、捕获该异常
3、自定义异常-案例
要求:用户输入的密码,必须大于3个字符否则报错
# 1、自定义异常类-Exception-有魔法方法(init-初始化)(str-设置异常的描述信息)
class ShortInputError(Exception):
def __init__(self,length,min_len): # 定义形参
# 用户输入的密码长度
self.length = length
# 系统要求的最短长度
self.min_len = min_len
# 设置异常的描述信息
def __str__(self):
return f'您输入的密码长度是{self.length},密码不少于{self.min_len}个字符'
# 2、抛出异常
def main():
try:
con = input('请输入密码:')
if len(con) < 3:
# 抛出异常类创建的对象
raise ShortInputError(len(con),3)
# 3、捕获该异常
except Exception as result:
print(result)
else:
print('没有异常,密码输入完成')
main()
结果1(成功)-提示用户成功
请输入密码:123
没有异常,密码输入完成
结果2(不成功)-报错给用户
请输入密码:2
您输入的密码长度是1,密码不少于3个字符
七、异常总结
1、异常语法
try:
可能发生异常的代码
except:
如果发生异常执行的代码
else:
没有异常执行的代码
finally:
无论是否异常都要执行的代码
2、捕获异常类型
except 异常类型:
代码
except 异常类型 as xx:
代码
3、自定义异常
1、自定义异常类:
class 异常类类名(Exception):
# 初始化
def __init__(self,,):
self.属性 = 属性
...
# 设置异常类的描述信息
def __str__(self):
return
2、抛出异常:raise 异常类对象() # 按照要求,实参和形参个数一致
3、捕获异常:(同系统异常写法)