异常语法
try:
可能发⽣异常的代码
except:
如果出现异常执⾏的代码
else:
如果没有异常执⾏的代码
finally:
⽆论是否异常都要执⾏的代码
捕获指定异常
try:
可能发⽣异常的代码
except 异常类型:
如果捕获到该异常类型执⾏的代码
捕获多个指定异常
try:
可能发⽣异常的代码
except (异常类型1, 异常类型2):
如果捕获到该异常类型执⾏的代码
捕获异常描述信息
try:
print(num)
except (NameError, ZeroDivisionError) as result:
print(result)
捕获所有异常
try:
print(num)
except Exception as result:
print(result)
异常的else
else表示的是如果没有异常要执⾏的代码
try:
print(1)
except Exception as result:
print(result)
else:
print('没有异常')
异常的finally
finally表示的是⽆论是否异常都要执⾏的代码
try:
f = open('test.txt', 'r')
except Exception as result:
f = open('test.txt', 'w')
else:
print('没有异常')
finally:
f.close()
异常的传递
需求:1. 尝试只读⽅式打开test.txt⽂件,如果⽂件存在则读取⽂件内容,⽂件不存在则提示⽤户即可。2. 读取内容要求:尝试循环读取内容,读取过程中如果检测到⽤户意外终⽌程序,则 except 捕获异常并提示⽤户。
import time
try:
f = open("test.txt")
try:
while True:
content = f.readline()
if len(content) == 0:
break
time.sleep(2)
print(content)
except:
print("意外终⽌了读取数据")
finally:
f.close()
print("关闭⽂件")
except:
print("没有这个⽂件")
⾃定义异常
在Python中,抛出⾃定义异常的语法为 raise 异常类对象
# ⾃定义异常类,继承Exception
class 自定义异常类类名(Exception):
...
# 设置抛出异常的描述信息
def __str__(self):
...
# 抛出异常
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 main():
try:
con = input("请输⼊密码:")
if len(con) < 3:
raise ShortInputError(len(con), 3)
except Exception as result:
print(result)
else:
print("密码已经输⼊完成")
main()