学科分类
目录
基础

捕获异常信息

Python支持使用try-except语句捕获程序运行时的单个异常信息、多个异常信息、所有异常信息,也支持使用关键字as为异常类起别名。

1.捕获程序运行时的单个异常

捕获程序运行时的单个异常时,需要指定具体的异常,示例如下:

try:
    for i in 2:
        print(i)
except TypeError as e:
    print(f"异常原因:{e}")

上述代码首先使用TypeError去匹配可能出现的异常,然后通过关键字as为TypeError起别名,最后如果程序运行时产生异常则使用print()语句输出异常原因。

运行程序,结果如下所示:

异常原因:'int' object is not iterable

需要注意的是,如果指定的异常与程序产生的异常不一致,程序运行时仍会崩溃。

2.捕获程序运行时的多个异常

一段代码中可能会含有多个异常,此时可以将多个具体的异常组成元组放在except语句后处理,也可以联合使用多个except语句。示例如下:

try:
    print(count)
    demo_list = ["Python", "Java", "C", "C++"]
    print(demo_list[5])
except (NameError,IndexError) as error:
    print(f"异常原因:{error}")

上述代码首先在try子句中使用print()输出一个没有定义过的变量,这会引发NameError异常;然后又使用print()访问列表demo_li中的第5个元素,因此demo_list只有4个元素,在访问第5个元素时会产生异常IndexError。

运行程序,结果如下所示:

异常原因:name 'count' is not defined

在捕获多个异常时,还可以将except子句拆开,每个except子句对应一种异常,将上述代码修改为多个except子句,示例如下:

try:
    print(count)
    demo_list = ["Python", "Java", "C", "C++"]
    print(demo_list[5])
except NameError as error:
    print(f"异常原因:{error}")
except IndexError as error:
    print(f"异常原因:{error}")

运行程序,结果如下所示:

异常原因:name 'count' is not defined

3.捕获程序运行时的所有异常

在Python中,捕获所有异常有两种方式,一种是使用Exception,因为Exception是所有常见异常的父类,Exception中包含了所有常见的异常。示例如下:

try:
    print(count)
    demo_list = ["Python", "Java", "C", "C++"]
    print(demo_list[5])
except Exception as error:
    print(f"异常原因:{error}")

except语句使用Exception匹配可能出现的异常,因为IndexError是Exception的子类,所以except语句可以捕获到异常IndexError。

另一种方式是只使用except子句,省略具体的异常类型,此时except会捕获所有的异常,示例如下:

try:
    print(count)
    demo_list = ["Python", "Java", "C", "C++"]
    print(demo_list[5])
except :
    print("程序出现异常,原因未知")

在except后空缺异常,也会捕获所有常见异常,但这种方式不能获取具体的异常信息。

点击此处
隐藏目录