目录
一、了解异常
当解释器检测到一个错误的时候,解释器就无法正常的执行代码了,反而出现错误的提示,这种错误的提示就叫异常。
比如说:以r的方式打开一个不存在的文件
示例:
open('1.txt', 'r')
二、捕获异常
格式:
try:
可能发生错误的代码
except:
如果try里面的代码发生异常,就执行此处的代码
示例:
try:
open('1.txt', 'r')
except:
open('1.txt', 'w')
print(111111)
2.1 捕获指定的异常
格式:
try:
可能发生错误的代码
except 异常类型:
如果你要捕获的错误类型在上面异常中出现了,那么就执行这个代码
示例:
try:
print(aa)
except NameError:
print('出现NameError错误')
注意:
-
如果尝试执行的代码的异常类型和要捕捉的异常类型不一致时,则无法捕获异常
-
一般try下面只放一行代码
2.2 捕获多个指定异常
当捕获多个指定异常的时候,可以把要捕获的异常类型的名字,放在except后面,使用元组的方式进行书写。
示例:
try:
print(aa)
# 1/0
except (NameError, ZeroDivisionError):
print('出现NameError错误')
2.3 捕获异常的描述信息
示例:
try:
# print(aa)
1/0
except (NameError, ZeroDivisionError) as e:
print(e)
2.4 捕获所有异常
Exception是所有程序异常的父类
示例:
try:
open('1.txt', 'r')
# print(aa)
# 1/0
except Exception as e:
print(e)
2.5 异常中的else
示例:
try:
# open('1.txt', 'r')
aa = 1
print(aa)
# 1/0
except Exception as e:
print(e)
else:
print('没有错误')
2.6 异常中finally
finally表示的是无论是否有异常,都要执行的代码,比如说关闭文件操作。
示例:
try:
f = open('1.txt', 'r')
except Exception as e:
print(e)
f = open('1.txt', 'w')
else:
print('没有异常,代码正常执行')
finally:
print('代码执行完毕')
f.close()
2.7 异常的传递
所谓异常的传递就是指各个异常的相互嵌套
示例:
try:
aa = 1
try:
# print(aa)
1/0
except NameError as n:
print(n)
except Exception as e:
print(e)
四、自定义异常
在Python中,抛出自定义异常的语法为raise异常类对象
需求:密码的长度不足,则报出异常(用户输入密码,如果说用户输入的密码长度不足3位,则抛出自定义异常,并且捕获)
示例:
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 e:
print(e)
else:
print('长度符合要求')
if __name__ == '__main__':
main()