捕获异常

4 阅读1分钟

一.捕获常规异常

try:
    可能发生错误代码
except:
    如果出现异常执行的代码

2.捕获指定异常

eg.

tryprint(name)
except NameError as e:
    print("出现了变量未定义的异常")
    print(e)         # e:错误的原因
    
输出:       出现了变量未定义的异常
             name 'name' is not defined

3.捕获多个异常

try:
    1/0
    print(name)
except(NameError,ZeroDivisionError) as e:
    print("出现变量未定义或者除以0的异常")
    
输出:        出现变量未定义或者除以0的异常

4.捕获全部异常

try:
    f=open("D:/123.txt","r")
except Exception as e:
    print("出现异常了")
/except:
    print("出现异常了")
输出:         出现异常了

5.异常的else和finally

(1)else:

try:
    print(1)
except Exception as e:
    print("我是else,是没有异常时执行的代码")

(2)finally:无论有没有出现异常都要执行的代码

二.异常的传递性

当函数 func01 中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数 func02,当 func02 也没有捕获处理这个异常的时候,main 函数会捕获这个异常,这就是异常的传递性。

提示: 当所有函数都没有捕获异常的时候,程序就会报错

def func01():  # 异常在func01中没有被捕获
    print("这是func01开始")
    num = 1 / 0
    print("这是func01结束")


def func02():  # 异常在func02中没有被捕获
    print("这是func02开始")
    func01()
    print("这是func02结束")


def main():  # 异常在main中被捕获
    try:
        func02()
    except Exception as e:
        print(e)


main()

输出:      
这是func02开始
这是func01开始
division by zero