Python 获取异常(try…exception)信息

Python 获取异常(try…exception)信息

Python 获取异常(try...exception)信息

在编程过程中,我们经常会遇到各种错误和异常情况。对于这些异常,我们希望能够获取到错误信息,以便后续处理。Python 提供了异常处理机制来捕获和处理这些异常,并获取异常信息。本文将详细介绍如何使用 try...except 语句来获取异常信息,并提供一些常见的异常处理示例。

什么是异常?

Python 中,异常指的是程序运行时发生的一些错误或不正常的情况。当程序无法执行或者产生意外结果时,Python 会触发异常并中止程序的执行。常见的异常包括 ZeroDivisionErrorIndexErrorFileNotFoundErrorTypeError 等。

try...except 语句

try...except 语句是异常处理的核心机制。它的基本语法结构如下:

try:
    # 可能引发异常的代码块
    pass
except ExceptionType1:
    # 异常类型1的处理代码
    pass
except ExceptionType2:
    # 异常类型2的处理代码
    pass
else:
    # 当没有异常发生时执行的代码
    pass
finally:
    # 无论是否发生异常,都会执行的代码
    pass
  • try 代码块中放置可能会引发异常的代码,如果在执行 try 代码块时发生异常,程序将跳转到 except 代码块。
  • try 代码块中的代码被称为 受保护的代码,因为它们受到了异常处理机制的保护。
  • except 代码块中,可以使用一种或多种异常类型来捕获和处理异常。多个 except 代码块可以用于处理不同类型的异常。
  • 当异常被捕获时,程序将跳过剩余的 except 代码块,然后继续执行紧随 try 语句的后续代码。
  • 如果没有异常发生,将执行 else 代码块。
  • finally 代码块中的代码无论是否发生异常都会被执行。

下面通过几个示例来演示 try...except 的用法。

示例 1:捕获异常并输出异常类型和异常信息

try:
    num1 = int(input("请输入一个整数:"))
    num2 = int(input("请输入另一个整数:"))
    result = num1 / num2
    print(f"{num1} 除以 {num2} 的结果为:{result}")
except ZeroDivisionError as e:
    print("除数不能为零!")
    print(f"异常信息:{e}")
except ValueError as e:
    print("输入的值必须为整数!")
    print(f"异常信息:{e}")
else:
    print("没有发生异常")
finally:
    print("程序执行完毕")

运行结果:

请输入一个整数:10
请输入另一个整数:0
除数不能为零!
异常信息:division by zero
程序执行完毕

示例 2:捕获多个异常类型

try:
    num = int(input("请输入一个整数:"))
    print(f"输入的数值为:{num}")
    result = 10 / num
    print(f"10 除以 {num} 的结果为:{result}")
except (ZeroDivisionError, ValueError) as e:
    print("输入的值无效!")
    print(f"异常类型:{type(e).__name__},异常信息:{e}")
else:
    print("没有发生异常")
finally:
    print("程序执行完毕")

运行结果:

请输入一个整数:abc
输入的值无效!
异常类型:ValueError,异常信息:invalid literal for int() with base 10: 'abc'
程序执行完毕

示例 3:处理未知异常类型

在实际编程中,我们无法预知可能发生的所有异常类型,可以使用 Exception 类来捕获未知的异常类型。

try:
    num = int(input("请输入一个整数:"))
    result = 10 / num
    print(f"10 除以 {num} 的结果为:{result}")
except Exception as e:
    print("发生异常!")
    print(f"异常类型:{type(e).__name__},异常信息:{e}")
else:
    print("没有发生异常")
finally:
    print("程序执行完毕")

运行结果:

请输入一个整数:0
发生异常!
异常类型:ZeroDivisionError,异常信息:division by zero
程序执行完毕

获取异常信息

except 代码块中,除了输出异常信息外,我们还可以使用 sys 模块中的 exc_info() 函数来获取更详细的异常信息。

import sys

try:
    num1 = int(input("请输入一个整数:"))
    num2 = int(input("请输入另一个整数:"))
    result = num1 / num2
    print(f"{num1} 除以 {num2} 的结果为:{result}")
except ZeroDivisionError as e:
    print("除数不能为零!")
    print("异常信息:", sys.exc_info())
except ValueError as e:
    print("输入的值必须为整数!")
    print("异常信息:", sys.exc_info())
else:
    print("没有发生异常")
finally:
    print("程序执行完毕")

运行结果:

请输入一个整数:10
请输入另一个整数:0
除数不能为零!
异常信息: (<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero'), <traceback object at 0x7faaa6fb9d80>)
程序执行完毕

sys.exc_info() 函数返回一个包含三个元素的元组,分别是异常类型、异常实例和异常发生时的追踪信息。

结语

通过使用 try...except 语句,我们可以捕获和处理 Python 程序中的异常,从而避免程序的崩溃。同时,我们还可以获取异常信息,方便我们进行调试和错误定位。合理利用异常处理机制,可以使我们的程序更加健壮和可靠。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程