Python 尝试/例外和错误处理

防止 Python 脚本崩溃。了解 try、 except、finally 块以及如何正确引发自定义异常。

在编辑器中尝试

概述

在现实的编程世界中,错误是完全不可避免的。文件可能会被删除,网络连接可能会断开,或者用户可能在脚本需要输入数字时输入字母。如果在没有保护措施的情况下发生这些情况,Python 将停止执行并抛出异常(运行时错误),从而使整个程序崩溃。错误处理是优雅地预测和管理这些故障的艺术。

Python 中错误管理的基础是“try”和“ except”块结构。您将潜在危险的代码放置在“try”块内。 Python 将尝试执行它。如果发生错误,Python 不会崩溃,而是会拦截异常并立即跳转到执行“ except ”块中包含的代码。这允许程序恢复、显示友好的错误消息并继续运行。

捕获特定的、有针对性的异常而不是编写一揽子“例外:”块是一个关键的最佳实践。例如,明确捕获“FileNotFoundError”或“ValueError”可确保您正在处理您预期的确切问题,而不是意外掩盖您真正需要了解的不相关错误(例如语法错误)。

Python 还提供了一个可选的“else”块,仅当“try”块完全成功完成且没有引发任何错误时才会执行。这是放置绝对取决于危险操作成功与否的逻辑的完美位置。此外,“finally”块提供了一种无论发生什么情况(无论是否发生错误)都执行代码的方法。 “finally”块对于清理操作至关重要,例如关闭数据库连接或释放文件锁。

除了捕获错误之外,Python 还允许开发人员使用“raise”关键字显式触发错误。引发异常允许您在逻辑中实施严格的约束,在无效数据破坏应用程序状态之前拒绝它。通过定义继承自 Python 基“Exception”类的自定义异常类,开发人员可以为大型企业应用程序创建高度特定于域的错误层次结构。

代码和执行输出

在与潜在危险或不存在的文件结构交互时创建结构安全。

def divide_numbers(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        return "Error: Cannot divide by zero!"
    except TypeError:
        return "Error: Both arguments must be numbers."
    else:
        return f"The result is {result}"
    finally:
        print("Execution completed.")

print(divide_numbers(10, 2))
print(divide_numbers(10, 0))
端子输出
Execution completed.
The result is 5.0
Execution completed.
Error: Cannot divide by zero!

逐步实施

  • 验证用户表单提交
  • 确保网络请求不会因超时而崩溃
  • 在finally块中安全地关闭数据库连接

常见问题解答

什么是“提高”关键字?

raise 关键字用于有目的地引发异常。您可以定义要引发的错误类型以及要打印给用户的文本。

相关主题

推荐的 Python 资源

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