Python Try Except

2025年8月20日 | 阅读 8 分钟

在 Python 中,try-except 块用于处理异常。这些块可以防止您的代码因意外错误而中断。Try 和 except 块成对工作。每次使用 try 块时,都必须使用 except 块。这可以防止程序在执行过程中崩溃。如果在 try 块中发生任何错误,它将停止程序的执行并跳转到 except 块。

语法

try-except 的语法如下

示例

输出

10 never be divisible by 0
Hii i am printed after exception

说明

在上面的示例中,您将 10 除以 0;这在逻辑上是不可能的。如果您不使用 try-except 块,它将给出错误“即 ZeroDivisionError: division by zero”并停止程序的执行,而下一条语句不会打印。但是您使用了 try-except 块,因此它会打印 except 块中写的语句,但不会停止程序的执行,它会打印下一条语句。

try 块

try 块用于检查错误。当您在 try 块中编写代码时,它会检查代码。如果代码中有任何错误,它将停止在 try 块中编写的代码的执行,并跳转到 except 块。

Except 块

except 块用于处理异常。try 块识别错误,然后 except 块处理该错误,这可以防止程序意外崩溃。它会显示异常类型或手动写入 except 块的语句,而不是显示错误。

注意:请记住,每次使用 try 块时,都必须使用 except 块。您可以为单个 try 块使用多个 except 块;它将跳转到与相关异常匹配的特定 except 块。

Exception

异常是在运行时可能发生的不可预测的错误。您的代码语法可能正确,并且代码会产生一个结果,但它会产生不正确的输出,因此为了避免这类错误,您可以使用 try 和 except。

异常处理

正如您所知,异常是运行时发生的不可预测的事件,因此通过异常处理,Python 通常会停止执行 try 块中的代码,跳转到 except 块生成错误消息,而不会使代码崩溃。

Try 和 Except 块如何工作?

Try 和 Except 块协同工作;您不能单独使用这些块。当您在 try 块中编写代码时,它会分析或检查代码。如果在 try 块中没有任何错误,那么 Python 解释器将跳过 except 块并执行后续语句。

但是,如果 try 块中发生任何错误,那么 Python 解释器将停止执行并直接跳转到 except 块。在 try 块中发生错误的那一行,在该行之后,解释器将停止 try 块的执行,这意味着 try 块中该行之后的语句不会执行。

它会打印 except 块中的异常,这可以是 Python 内置异常或手动输入的语句。打印完语句后,它会继续执行后续代码。

示例 1:当 try 块中没有发生错误时,它是如何工作的?

示例

输出

My name is John i am 22 years old and i live in Las Vegas
I am the next statement after John details
Hii, i am printed after exception block

说明

在上面的示例中,try 块中没有错误,因此它执行 try 块中的代码,跳过 except 块,并打印 except 块之后的下一条语句。

示例 2:当 try 块中发生错误时,它是如何工作的?

示例

输出

An exception of type NameError occurred.
name 'location' is not defined
You have not assigned any value to the location
Hii, i am printed after exception block

说明

在上面的示例中,try 块中发生了一个错误。您没有为 location 变量赋值。您会注意到在 "print(f'\nMy name is {name} i am {age} years old, and i live in {location}\n')" 语句之后还有一条语句。

尽管如此,它还是停止了 try 块的执行,跳转到 except 块,并打印了异常的类型,即 NameError 异常,然后 except 块中的所有语句都会被执行,接着执行 except 块之后的代码。

注意:如果在代码中发生错误,则只会在错误行之后停止 try 块的执行,但会继续执行后续代码。

为什么需要 Try 和 Except?

  • 它可以防止 程序 在运行时崩溃。
  • 它允许自定义错误。
  • 易于调试代码。
  • 有许多内置异常。

Python 错误和内置异常

这些错误可大致分为两类

语法错误存在预定义的子句和语句,以及用于编写格式的规则,因此无法通过 try 和 except 来处理错误,例如缩进错误、冒号错误等。这些错误属于语法错误。

逻辑错误:当您的代码语法正确,但您的程序可能运行但产生错误或不正确的结果时,那就是逻辑错误,您可以使用 try 和 except 来处理该错误。

Python 提供了多种内置异常;所有异常都必须是继承自 BaseException 的类的实例。有许多内置异常可用于处理防止程序在运行时崩溃的错误。

常见异常

  • IndexError 异常:当您访问列表中、元组中或集合中不存在的索引时。
  • NameError 异常:未给变量赋值。
  • FileNotFoundError 异常:当您尝试读取或写入不存在的文件或提供错误路径时。
  • ZeroDivisionError 异常:除以零。

多个 Except 子句

在 Python 中,您可以使用多个 except 子句来处理单个 try 语句。如果您认为您的代码可能引发多种不同的异常,那么您可以使用各种 except 子句。

提及异常名称,错误将匹配异常子句并输出相关异常子句的结果。

示例

输出

5.0
You access wrong index it is out of bound

嵌套 Try 和 Except

Python 还提供了使用嵌套 try 的功能。当您的代码可能引发不同类型的异常时,这很有用,这样您就可以分别处理它们。

示例

输出

5.0
name 'name' is not defined
Finally block always executes

division by zero
Finally block always executes

Else 和 Finally

否则

您可以在所有 except 子句之后使用 else 块。只有在 try 块中未发生错误时,else 块才会执行。如果在 try 块中发生任何错误,它将跳转到 except 块并执行该代码,并忽略 else 块。

示例 1:当 try 块中没有错误时,else 如何工作?

示例

输出

5.0
No error occur in try block

说明

在上面的示例中,您可以看到它执行了 try 块语句,然后打印了 else 块。try 块中没有发生错误,因此它跳过了 except 块。

示例 1:当 try 块中发生错误时,else 如何工作?

示例

输出

division by zero

说明

在上面的示例中,您可以看到它执行了 try 块语句,然后发生错误,解释器跳转到 except 块并打印异常,“ZeroDivisionError”,并忽略 else 块。

Finally 块

无论是否发生错误,finally 块总是在 try 和 except 块执行后执行;finally 块总是会执行。在 try、except 和 else 块之后使用 finally 块。

为什么使用 Finally?

  • 它用于显示任何强制性消息,无论过程是否完成。
  • 它用于清理任务,例如关闭文件等。
  • 它确保最终步骤,无论在 try 和 except 中发生什么。

常见问题解答 (FAQs)

1. Python 中的 Try 和 Except 是什么?

在 Python 中,except 块用于在运行时处理异常。这些块可以防止您的代码因意外错误而崩溃。

2. 为什么必须使用 Try 和 Except?

  • 它可以防止程序在运行时运行。
  • 它允许自定义错误。
  • 易于调试代码。
  • 有许多内置异常。

3. 如何处理异常?

在 Python 中,异常通过 try 和 except 进行处理。如果 try 块中的代码引发错误,它将停止执行并跳转到 except 块。

4. Else 与 try/except 的用途是什么?

您可以在所有 except 子句之后使用 else 块。只有在 try 块中未发生错误时,else 块才会执行。如果在 try 块中发生任何错误,它将跳转到 except 块并执行该代码,并忽略 else 块。

5. 编写一个使用 try、except、else 和 finally 的程序。

输出

The car is starting from London and reaching Paris
The car is crashing because the name 'returning' is not defined
There is no error in the outer try block
Finally, block always executes