Python_异常
1.异常的写法:
(1)语法:
(2)体验
# 需求:尝试打开test.txt文件,如果文件不存在,用只写方式打开
try:
f=open('test.txt','r')
except:
f=open('test.txt','w')
2.捕获指定异常
2.1 语法:
注意:
(1)如果尝试执行的代码异常类型和要捕获的异常类型不一致,则无法捕获异常
(2)一般try下方只放一行尝试执行的代码
try:
print(num)
except NameError:
print('有错误') #有错误
3.捕获多个指定异常
3.1 语法:
当捕获多个异常时,可以把要捕获的异常类型的名字,放倒except后,并使用元组的方式进行书写
try:
print(num)
except (NameError,ZeroDivisionError):
print('有错误') #有错误
4.捕获异常描述信息
try:
print(num)
except (NameError,ZeroDivisionError) as result:
print(result) #name 'num' is not defined
5.捕获所有异常
Exception是所有程序异常类的父类
try:
print(num)
except Exception as result:
print(result) #name 'num' is not defined
6.异常的else
else表示的是如果没有异常要执行的代码
try:
print(1) #1
except Exception as result:
print(result)
else:
print('没有异常所执行的代码') #没有异常所执行的代码
7.异常的finally
finally表示的是无论是否异常都要执行的代码,例如文件的关闭
try:
f=open('test1.txt','r')
except Exception as result:
f=open('test1.txt','w')
finally:
f.close()
8.异常的传递
import time
try:
f=open('test.txt','r')
# 尝试循环读取内容
try:
while True:
con=f.readline()
# 如果读取完成,则退出循环
if len(con)==0:
break
time.sleep(3)
print(con)
except:
# ctrl+c进行意外终止
print('程序意外终止')
except:
print('文件不存在')
9.自定义异常
将不满足程序逻辑要求的代码,抛出自定义异常,捕获异常
抛出异常语法:
# 1.自定义异常类,继承EXception
class ShortInput(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}'
def main():
# 2.抛出异常
try:
password=input('请输入密码:')
if len(password)<3:
# 抛出异常类创建的对象
raise ShortInput(len(password),5)
# 3.捕获异常
except Exception as result:
print(result)
else:
print('密码输入完成')
main()