一、异常二、捕获异常三、含else的异常捕获四、异常传递五、自定义异常
一、异常
try:
f = open('test.txt', 'r')
except:
f = open('test.txt', 'w')
f.close() # 切记创建文件对象要及时关闭
二、捕获异常
try:
print(num)
except EOFError: # 捕获异常
print("EOF错误")
except NameError:
print("未定义变量")
try:
print(10 / 0)
except(NameError, ZeroDivisionError) as e: # 捕获多个异常并打印出异常描述信息,e 是对这个异常的描述信息
print(f'{type(e)}: {e}')
try:
open('test2.txt', 'r') # 这样能捕获所有异常信息,并打印出异常的描述信息
except Exception as e:
print(e)
三、含else的异常捕获
try:
print(1)
except Exception as e:
print(e)
else:
print("没有异常") # 当程序没有异常时执行else里面的内容
try:
f = open('test.txt', 'r')
except Exception as e:
print(e)
f = open('test.txt', 'w')
else:
print("没有异常")
finally:
f.close()
四、异常传递
# 需求1:尝试只读打开text.txt文件,若存在内容则读取内容,不存在内容则提示用户
# 需求2:读取内容:循环读取,当无内容的时候退出循环,如果用户意外之中,提示用户已经意外终止
import time
filename = "test.txt"
try:
f = open(filename)
try:
while True:
line = f.readline()
time.sleep(3)
if len(line) == 0:
break
print(line)
except:
# 在命令提示符中按下ctrl+C就可以制造《意外终止》
print("程序被意外终止")
except:
print("此文件不存在")
五、自定义异常
# 在Python中,抛出⾃定义异常的语法为 raise 异常类对象 。
# 需求:密码⻓度不⾜,则报异常(⽤户输⼊密码,如果输⼊的⻓度不⾜3位,则报错,
# 即抛出⾃定义异 常,并捕获该异常)。
# 自定义异常类,继承Exception
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}个字符'
def fun():
try:
con = input('请输入密码:')
if len(con) < 6:
raise ShortInputError(len(con), 6)
except Exception as e:
print(e)
else:
print('输入密码已完成')
fun()



