python错误与异常

python错误与异常

1、异常

(1)错误 与 异常的区别
❖ 错误与异常都是在程序编译和运⾏时出现的错误
❖ 异常可以被开发⼈员捕捉和处理
❖ 错误⼀般是系统错误,⼀般不需要开发⼈员处理(也⽆法处理),⽐如内存溢出
(2)什么是异常?
❖ 异常即是⼀个事件,该事件会在程序执⾏过程中发⽣,影响了程序的正常执⾏。
❖ 有些是由于拼写、配置、选项等等各种引起的程序错误,有些是由于程序功能处理逻辑不完善引起的漏洞,这些统称为程序中的异常

2、异常处理流程

1)异常解决⽅案
2)如果是拼写、配置等引起的错误,根据出错信息进⾏排查错误出现的位置进⾏解决
3)如果是程序设计不完善引起的漏洞,根据漏洞的情况进⾏设计处理漏洞的逻辑

image

3、异常捕获与异常处理

image

# 除法
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抛出异常

image

# 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)