捕获异常
异常的else
异常finally
异常的传递
自定义异常
一、异常的写法
try:
可能发生错误的代码
except:
如果出现异常执行的代码
体验
try:
f = open('test.txt', 'r')
except:
f = open('test.txt', 'w')
运行后新建了一个文件夹,说明 只读的模式失败了,执行了写模式,新建了文件,控制台没有报错。
二、捕获指定异常类型
2.1语法
try:
可能发生错误的代码
except 异常类型:
如果捕获到该异常类型执行的代码
# NameError
# print(num)
# ZeroDivisionError
# print(1/0)
try:
print(numbers)
except NameError:
print('此处不能直接打印num')
注意:如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常
一般try下方只放一行尝试执行的代码,不要放很多
三、捕获多个指定的异常类型
当捕获多个指定异常时,可以把要捕获的异常类型的名字,放到except后,并使用元组的方式进行书写
try:
print(1/0)
except (NameError, ZeroDivisionError):
print('有错误')
try:
# print(1/0)
print(numbers)
except (NameError, ZeroDivisionError):
print('有错误')
四、捕获异常描述信息
try:
print(num)
except(NameError, ZeroDivisionError) as result:
print(result)
try:
print(num)
except(NameError, ZeroDivisionError) as result:
print(result)
# 输出 name 'num' is not defined
五、捕获所有异常
Exception是所有程序异常类的父类
try:
print(num)
except Exception as result:
print(result)
try:
print(num)
except Exception as result:
print(result)
# 输出 name 'num' is not defined
六、异常的else
else表示的是如果没有异常要执行的代码
try:
print(1)
except Exception as result:
print(result)
else:
print('我是else,是没有异常的时候执行的代码')
num = 12
try:
print(num)
except Exception as result:
print(result)
else:
print('我是else,没有异常要执行')
# 输出
# 12
# 我是else,没有异常要执行
七、异常的finally
finally表示无论是否异常都要执行的代码
try:
f = open('test.txt', 'r')
except Exception as result:
f =open('test.txt', 'w')
else:
print('没有异常的输出')
finally:
print('我是不管是否有异常都要输出')
try:
f = open('test.txt', 'r')
except Exception as result:
f = open('test.txt', 'w')
else:
print('我是没有异常的时候输出')
finally:
print('我是不管是否有异常都要输出')
f.close()
# 输出 我是不管是否有异常都要输出
八、异常的传递
体验异常传递
import time
try:
f = open('test.txt')
try:
while True:
con = f.readline()
if len(con) == 0:
break
time.sleep(3)
print(con)
except:
print('程序被意外终止')
except:
print('该文件不存在')
九、自定义异常
抛出自定义异常的语法为raise,异常类对象
class ShortInputExcept(Exception):
def __init__(self, length, min_length):
self.length = length
self.min_length = min_length
def __str__(self):
return f'您的密码是{self.length}位数,最小密码长度是{self.min_length}位数'
def test():
try:
num = input('请输入密码')
if len(num) < 3:
raise ShortInputExcept(len(num), 3)
except Exception as result:
print(result)
else:
print('密码正确')
test()
十、总结
1、异常语法
try:
可能发生异常的代码
except:
如果发生了异常要执行的代码
else:
没有异常时,执行的代码
finally:
不管有没有异常,最后都要执行
2、捕获异常:
try:
异常代码
except Except as xx:
print(xx)
3、自定义异常
class 异常类类名(Except):
def __init__(self, 形参):
self.xx = xx
def __str__(self):
return f'xxxx'
抛出异常
raise 异常类名(实参)
捕获异常
except Except as result:
print (result)