python错误与异常
1、异常
(1)错误 与 异常的区别
❖ 错误与异常都是在程序编译和运⾏时出现的错误
❖ 异常可以被开发⼈员捕捉和处理
❖ 错误⼀般是系统错误,⼀般不需要开发⼈员处理(也⽆法处理),⽐如内存溢出
(2)什么是异常?
❖ 异常即是⼀个事件,该事件会在程序执⾏过程中发⽣,影响了程序的正常执⾏。
❖ 有些是由于拼写、配置、选项等等各种引起的程序错误,有些是由于程序功能处理逻辑不完善引起的漏洞,这些统称为程序中的异常
2、异常处理流程
1)异常解决⽅案
2)如果是拼写、配置等引起的错误,根据出错信息进⾏排查错误出现的位置进⾏解决
3)如果是程序设计不完善引起的漏洞,根据漏洞的情况进⾏设计处理漏洞的逻辑
3、异常捕获与异常处理
# 除法
def div(a, b):
return a/b
# 定义一个列表
lis1 = [1, 2, 3]
# 读取文件
f = open('data.txt')
try: # 执行代码
# 除数异常
print(div(1, 0))
# 索引异常
print(lis1[3])
# 读取文件时异常
f.readlines()
# f.close() # 读取文件出现异常时,要执行f.close(),如果前面其他地方有异常时就不会走到f.close(),此时放在finally下
# 方法一:继承父类Exception捕获try模块里面的所有异常,进行处理
except Exception as e: # 发生异常时执行的代码,except捕获接收各种异常
print(e)
print("这里有个异常")
# 方法二,每个异常都捕获
# except ZeroDivisionError as e1:
# print(e1)
# print("这里有个异常")
# except IndexError as e1:
# print(e1)
else:
print("没有异常时执行")
finally: # 最终都会被执行,无论是否有异常
print("finally")
f.close()
4、使⽤raise抛出异常
# raise:手动触发异常
def set_age(num):
if num <= 0 or num > 200:
# raise ValueError
raise ValueError(f"值错误: {num} ") # 可以传入参数
else:
print(f"设置的年龄为: {num}")
5、⾃定义异常
语法:raise [Exception [, args [, traceback]]]
# 自定义异常
# 定义一个类,继承Exception
class MyException(Exception):
# 构造方法
def __init__(self, msg):
print(f"这是一个异常: {msg}")
# 调用自定义异常
def set_age1(num1):
if num1 <= 0 or num1 > 200:
# raise ValueError
raise MyException(f"值错误: {num1} ") # 可以传入参数
else:
print(f"设置的年龄为: {num1}")
# 调用函数
set_age1(-1)