# -*- encoding: utf-8 -*-
"""
# **异常**
1、含义:当检测到一个错误,解释器无法执行下去,并出现一些错误提示,即为异常。
2、语法:
try:
可能发生错误的代码
except [Exception as 变量]:
出现异常执行的代码(打印变量)
else:
未出现异常时执行的代码
finally:
有没有异常都要执行的代码
3、异常传递,即异常嵌套
4、自定义异常
4.1、继承父类Exception
4.2、抛出异常 raise 自定义异常类()
4.3、try except捕获抛出的异常
"""
'''
try:
可能发生错误的代码
except:
出现异常执行的代码
'''
# 1、简单体验异常
try:
open('text100.txt')
except:
print('text100.txt不存在')
# text100.txt不存在
# 2、捕获指定异常及异常描述信息:
# 执行print(a),a未定义,所以报错。NameError: name 'a' is not defined
# 其中NameError是异常类型;name 'a' is not defined是异常信息。
'''
try:
可能发生错误的代码
except 异常类型 as 变量:
出现异常执行的代码(打印变量)
'''
try:
print(a)
# 如果异常是NameError,报错;如果出现其他异常,不报错。
# 异常描述信息捕获后放在result
except NameError as result:
print(result) # name 'a' is not defined
# 3、捕获多个异常
# 多个异常以元组的方式进行书写,放在except后
'''
try:
可能发生错误的代码
except (异常类型1,异常类型2,...) as 变量:
出现异常执行的代码(打印变量)
'''
try:
print(5/0)
# 如果执行的代码发生元组中任意一种异常,都会被捕获,如果是其他异常,不会被捕获。
except (ZeroDivisionError, NameError) as result:
print(result) # division by zero
# 4、捕获所有异常
# Exception是所有程序异常类的父类!!!
'''
try:
可能发生错误的代码
except Exception as 变量:
出现异常执行的代码(打印变量)
'''
try:
print(5/0)
except Exception as result:
print(result) # division by zero
# 5、异常中的else
'''
try:
可能发生错误的代码
except Exception as 变量:
出现异常执行的代码(打印变量)
else:
未出现异常时执行的代码
'''
try:
print(5/2)
except Exception as result:
print(result)
else:
print('没有发生异常,真开心!')
# 2.5
# 没有发生异常,真开心!
# 5、异常中的finally
'''
try:
可能发生错误的代码
except Exception as 变量:
出现异常执行的代码(打印变量)
else:
未出现异常时执行的代码
finally:
有没有异常都要执行的代码
'''
try:
f = open('test.txt')
except Exception as ex:
f = open('test.txt', 'w')
print(ex)
else:
print('没有发生异常,真开心!')
finally:
f.close()
# 5、异常传递
import time
try:
f = open('test.txt')
try:
while True:
# 循环读取文件内容
con = f.readline()
if len(con) == 0:
break
# 休眠2秒
time.sleep(2)
print(con)
except:
print('读取程序意外终止')
except:
print('文件不存在')
# 6、自定义异常
# 需求:用户输入密码,如果密码小于6位,抛出异常,并打印密码长度不足6位
# 自定义异常类,继承Exception,定义魔法方法init和str(设置异常描述信息)
class ShortPassError(Exception):
def __init__(self, len, min_len):
self.len = len
self.min_len = min_len
# 设置异常描述信息
def __str__(self):
return f'密码长度为{self.len},小于最小长度{self.min_len}'
def main():
try:
# 用户输入密码
password = input('请输入您的密码:')
# 判断输入密码的长度是否大于最小长度,小于,则抛出异常
if len(password) < 6:
# 异常对象,返回魔法方法str中的异常描述信息
raise ShortPassError(len(password), 6)
# 捕获异常信息
except Exception as result:
print(result)
# try中的代码正常执行,无异常,执行else
else:
print('密码输入完成!')
main()
python基础学习21_异常(异常传递、自定义异常)
最新推荐文章于 2024-04-15 10:55:34 发布