二、异常处理:

异常:所谓异常就是程序在运行过程中出现的异常,这种是事先不能预知的,只有在程序运行时才会出现,所以我们要编写异常处理的程序来应对。

try:
    坑能抛出异常的语句

except 异常1:
    捕获异常1时处理的步骤

except 异常2:
    捕获异常2时处理的步骤

finally:
    try语句块最后执行的操作

解读:程序先执⾏操作, 然后如果出错了会走except中的代码,如果不出错, 执⾏else中的代码。不论处不出错,最后都要执⾏finally中的语句,⼀般⽤try...except就够⽤了,顶多加上finally,finally⼀般⽤来作为收尾⼯作

我们先来看个异常的例子:

# 计算a+b

def cal(a, b):
    try:
        return a + b
    except TypeError as v:                      # 捕获到TypeError异常时执行这段代码块的处理步骤
        print(\'输入正确的数字(整数或者小数)\')

cal(10, \'胡辣汤\')

# 这个时候会执行自定义的处理方法
# 输入正确的数字(整数或者小数)

上面我们捕获到异常都是python自定义的异常(TypeErrorExcept等),在一些特定的场景中可能python内置的异常种类不能全部适用,所以我们需要抛出自定义的异常。那么自定义的异常要怎么写?⾃定义异常: 非常简单,只要你的类继承了Exception类,那你的类就是⼀个异常类,就这么简单。

class MyException(Exception):                   # 类继承了Exception类,这个类就是⼀个异常类了
    pass

def cal(a, b):
    if ((type(a) == int) or type(a) == float) and ((type(b) == int) or type(b) == float):
        return a + b
    else:
        raise MyException(\'输入正确的数字(整数或者小数)\')         #  当判断条件为假时我们手动抛出这个自定义异常

try:
    cal(10, \'胡辣汤\')
except MyException as m:                        # 然后这里捕获异常
    print(\'捕捉到自定义的异常\')                     # 捕获到异常后执行具体的处理步骤

except Exception as e:                          # Exception可以放在最后面,可以捕获所有异常
    print(\'出错了\')
finally:
    print(\'计算完成\')                           # 最后finally语句结尾

# 执行结果:
# 捕捉到自定义的异常
# 计算完成

这里再介绍一个知识点:查看具体的错误信息,当我们真正在调试的时候,最好是能看到错误源⾃于哪⾥,怎么办呢?需要引入另⼀个模块traceback这个模块可以获到我们每个⽅法的调⽤信息,⼜被成为堆栈信息,这个信息对我们拍错是很有帮助的,使用方法如下:

import traceback
def cal(a, b):
    try:
        return a + b
    except TypeError as v:
        print(traceback.format_exc())           # 这里可以把错误的堆栈信息打印出来,可以方便调试

cal(10, \'胡辣汤\')

收藏 打印