如何在 Python 中处理异常(Try-Except-Finally)

了解如何在 Python 中使用 try、 except、 else 和 finally 块处理异常。编写无错误且抗崩溃的 Python 代码。

在编辑器中尝试此解决方案

概述

强大的软件必须准备好处理意外情况,例如文件丢失、用户输入无效、数据库故障或网络中断。当 Python 中发生错误时,它会引发异常。如果不处理,异常会立即停止您的程序并打印回溯堆栈。

Python 管理运行时错误的主要工具是“try- except”块。您可以将可能引发错误的代码放置在“try”块内,并在一个或多个“ except”块内定义错误处理代码。强烈建议指定确切的异常类(如“ValueError”或“ZeroDivisionError”),因为捕获所有通用异常(“ except:”)可以掩盖错误。

为了使异常流更具表现力,Python 提供了两个附加块:“else”和“finally”。仅当“try”块中没有引发异常时,“else”块才会执行,这对于只应在成功时运行的代码很有用。无论是否发生异常,“finally”块*总是*执行,这使其成为关闭文件或数据库连接等清理的完美场所。

代码和执行输出

该脚本使用 try、 except、 else 和 finally 演示了 Python 中强大的错误处理。

handle_errors.py
在编辑器中尝试
def divide_numbers(a, b):
    try:
        # Code that might raise an exception
        result = a / b
    except ZeroDivisionError:
        # Handling a specific exception
        print("Error: Cannot divide by zero!")
    except TypeError:
        # Handling another exception type
        print("Error: Inputs must be numbers!")
    else:
        # Run only if try block succeeded
        print(f"Success! Result of {a}/{b} is {result}")
    finally:
        # Runs no matter what
        print("Division attempt completed.")

divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)
端子输出
Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.

逐步实施

  • 将可能失败的代码放在 try 块中。
  • 使用 except ExceptionType: 块捕获特定错误类型以优雅地处理故障。
  • 对于必须仅在成功的 try 块上执行的代码,请使用 else。
  • 利用finally 来保证清理操作无论出现错误都会运行。

常见问题解答

我可以在单个 except 块中捕获多个异常吗?

是的,您可以将它们作为元组传递: except (ValueError, TypeError) as e:。

我如何提出自己的例外情况?

使用 raise 关键字,后跟异常实例:raise ValueError("无效的配置值")。

相关主题

推荐的 Python 资源

通过相关的交互式教程、备忘单和代码比较来扩展您的知识。