如何检查 Python 中是否抛出了异常

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查 Python 中是否抛出了异常。本实验重点在于理解异常,并使用 try-except 代码块来捕获和处理它们,以防止程序崩溃。

你将首先创建一个会抛出 ZeroDivisionError 异常的 Python 脚本。然后,你将学习如何使用 try-except 代码块来捕获这个异常并妥善处理,使你的程序能够继续运行。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") subgraph Lab Skills python/catching_exceptions -.-> lab-559611{{"如何检查 Python 中是否抛出了异常"}} python/raising_exceptions -.-> lab-559611{{"如何检查 Python 中是否抛出了异常"}} end

理解异常

在这一步中,你将学习 Python 中的异常。异常是程序执行期间发生的、会打乱正常指令流程的事件。理解异常对于编写健壮且可靠的 Python 代码至关重要。

当 Python 中出现错误时,会抛出一个异常。如果该异常未得到处理,程序将终止并显示错误消息。不过,通过使用 try-except 代码块,你可以捕获并处理异常,防止程序崩溃。

让我们从一个抛出异常的简单示例开始:

  1. 在 LabEx 环境中打开 VS Code 编辑器。

  2. ~/project 目录下创建一个名为 division.py 的新文件。

    ~/project/division.py
  3. 将以下代码添加到 division.py 文件中:

    numerator = 10
    denominator = 0
    result = numerator / denominator
    print(result)

    这段代码尝试将 10 除以 0,这是一个无效操作,会抛出 ZeroDivisionError 异常。

  4. 在终端中使用以下命令运行脚本:

    python division.py

    你将看到类似如下的输出:

    Traceback (most recent call last):
      File "/home/labex/project/division.py", line 3, in <module>
        result = numerator / denominator
    ZeroDivisionError: division by zero

    回溯信息显示,division.py 文件的第 3 行发生了 ZeroDivisionError。由于异常未得到处理,程序终止了。

现在,让我们看看如何使用 try-except 代码块来处理这个异常。

使用 try-except 进行捕获

在这一步中,你将学习如何使用 try-except 代码块来捕获和处理 Python 中的异常。这能让你的程序即使在出现错误时也能继续运行。

try-except 代码块的基本结构如下:

try:
    ## Code that might raise an exception
except ExceptionType:
    ## Code to handle the exception

try 代码块内的代码会被执行。如果发生了 ExceptionType 类型的异常,except 代码块内的代码就会被执行。如果没有异常发生,except 代码块将被跳过。

让我们修改上一步中的 division.py 文件,以处理 ZeroDivisionError 异常:

  1. 在 VS Code 编辑器中打开 division.py 文件。

  2. 修改代码,加入 try-except 代码块:

    try:
        numerator = 10
        denominator = 0
        result = numerator / denominator
        print(result)
    except ZeroDivisionError:
        print("Error: Cannot divide by zero.")

    在这段代码中,try 代码块包含了可能会抛出 ZeroDivisionError 的除法运算。except 代码块捕获 ZeroDivisionError 并打印一条错误消息。

  3. 在终端中使用以下命令运行脚本:

    python division.py

    你将看到以下输出:

    Error: Cannot divide by zero.

    现在,程序没有崩溃,而是优雅地处理了 ZeroDivisionError 并打印了一条有用的消息。

这展示了如何使用 try-except 代码块来防止程序因异常而崩溃。

检查异常类型

在这一步中,你将学习如何在 except 代码块中检查异常类型并访问异常消息。这能让你以不同的方式处理不同类型的异常,并提供更具信息性的错误消息。

当捕获到异常时,你可以使用 as 关键字在 except 子句中将其赋值给一个变量:

try:
    ## Code that might raise an exception
except ExceptionType as e:
    ## Code to handle the exception
    ## 'e' is the exception object

变量 e 随后将包含异常对象,你可以使用它来访问有关异常的信息,例如其类型和消息。

让我们修改 division.py 文件,以检查异常类型并打印异常消息:

  1. 在 VS Code 编辑器中打开 division.py 文件。

  2. 修改代码以检查异常类型并打印消息:

    try:
        numerator = 10
        denominator = 0
        result = numerator / denominator
        print(result)
    except ZeroDivisionError as e:
        print(f"Error: {type(e).__name__} - {e}")

    在这段代码中,我们捕获 ZeroDivisionError 并将其赋值给变量 e。然后,我们使用 type(e).__name__ 来获取异常类型的名称,使用 e 来获取异常消息。我们将两者打印在一个格式化字符串中。

  3. 在终端中使用以下命令运行脚本:

    python division.py

    你将看到以下输出:

    Error: ZeroDivisionError - division by zero

    现在的输出包含了异常类型 (ZeroDivisionError) 和异常消息 (division by zero)。

这能让你提供有关所发生错误的更详细信息,从而更轻松地调试代码。你还可以利用这些信息以不同的方式处理不同类型的异常,为每种情况提供更具体的错误处理。

总结

在这个实验中,你学习了 Python 中的异常,异常是会打乱程序正常流程的事件。当错误发生时,会抛出异常,如果不进行处理,程序就会终止。

你还学习了如何使用 try-except 代码块来捕获和处理异常,从而防止程序崩溃。本实验展示了 ZeroDivisionError 以及如何使用 try-except 来处理它。