Python 异常处理:try、catch、finally 和 raise [示例]

什么是异常处理 Python?

异常是程序执行时发生的错误。然而,在运行程序时, Python 生成应处理的异常以避免程序崩溃。在 Python 语言,异常会在出现错误时自动触发,或者可以由您的代码触发和拦截。

异常表示,尽管该事件可能发生,但这种类型的事件很少发生。当该方法无法处理异常时,它将被抛出到其调用函数。最终,当主函数外抛出异常时,程序会突然终止。

异常的常见示例

  • 被零除
  • 访问不存在的文件。
  • 添加两个不兼容的类型
  • 尝试访问不存在的序列索引
  • 从断开连接的数据库服务器中删除表。
  • ATM 取款超过可用金额

为什么要使用异常?

以下是在以下情况下使用异常的原因 Python:

  • 异常处理允许您将错误处理代码与正常代码分开。
  • 一个例外是 Python 对象 这表示存在错误。
  • 与代码注释一样,异常可以帮助您提醒自己程序的期望。
  • 它使代码更加清晰,增强了可读性。
  • 允许您在一个地方以一种方式模拟错误处理所产生的后果。
  • 异常是处理错误消息的一种便捷方法。
  • In Python,可以使用 raise exception 方法在程序中引发异常。
  • 引发异常有助于您中断当前代码执行,并将异常返回给预期,直到它被处理为止。
  • 处理无法直接处理异常的组件。

例外规则

以下是一些基本规则 Python 异常处理:

  • 异常必须是类对象
  • 对于类异常,您可以使用带有提及特定类的 except 子句的 try 语句。
  • 即使语句或表达式在语法上正确,在尝试执行时也可能会显示错误。
  • 执行期间发现的错误称为异常,它们并不是无条件致命的。

Python 异常处理机制

异常处理由以下5个关键字管理:

  1. 尝试
  2. 捕捉
  3. 最后

Python Try 语句

try 语句包括关键字 try,后跟冒号 (:) 和一组可能发生异常的代码。它有一个或多个子句。

在执行 try 语句期间,如果没有发生异常,则解释器将忽略该特定 try 语句的异常处理程序。

如果在尝试套件中发生任何异常,则尝试套件将过期,并且程序控制权将转移到尝试套件之后匹配的异常处理程序。

Syntax:
try:
statement(s)

catch 语句

Catch 块每次接受一个参数,即它可能捕获的异常类型。这些参数的范围可以从特定类型的异常(可能变化)到捕获所有类别的异常。

catch 块的规则:

  • 您可以使用关键字 catch 定义一个 catch 块
  • 捕获异常参数始终用括号括起来
  • 它始终代表 catch 块处理的异常类型。
  • 异常处理代码写在两个{}花括号之间。
  • 您可以在单个 try 块内放置多个 catch 块。
  • 仅可以在 try 块之后使用 catch 块。
  • 所有的 catch 块都应该按照从子类到超类异常的顺序排列。

示例:

try
}
catch (ArrayIndexOutOfBoundsException e) {
System.err.printin("Caught first " + e.getMessage()); } catch (IOException e) {
System.err.printin("Caught second " + e.getMessage());
}

Finally 语句 Python

无论是否引发异常,Finally 块始终会执行。final 关键字允许您创建一个跟在 try-catch 块后面的代码块。

最后,子句是可选的。它旨在定义应在所有条件下执行的清理操作。

try:
    raise KeyboardInterrupt
finally:
    print 'welcome, world!'
Output
Welcome, world!
KeyboardInterrupt

Finally 子句在 try 语句之前执行。

在 Python

raise 语句指定初始化异常对象的参数。这里,异常名称后面跟着一个逗号,逗号后面跟着参数或参数的元组。

语法:

raise [Exception [, args [, traceback]]]

在这个语法中,参数是可选的,并且在执行时,异常参数值始终为无。
示例:
A Python 异常可以是任何值,如字符串、类、数字或对象。大多数此类异常由 Python 核心是具有参数的类,该参数是该类的一个实例。

重要 Python 故障

错误类型 描述
算术错误 ArithmeticError 是所有算术异常的基类。它是在算术运算错误时引发的。
导入错误 当您尝试导入不存在的模块时,会引发 ImportError。如果您在模块名称中输入错误或模块不在标准路径中,则会发生此类异常。
索引错误 当您尝试引用超出范围的序列时,会引发 IndexError。
密钥错误 当在字典中找不到特定键时,会引发 KeyError 异常。
名称错误 当代码中引用本地或全局命名空间中不存在的名称时,会引发 NameError。
值错误 当函数或内置操作接收到可能属于正确类型但没有合适值的参数时,会引发值错误。
EOF错误 当其中一个内置函数(input() 或 raw_input())在没有读取任何数据的情况下达到 EOF 条件时,就会引发此类错误。
零除错误 当所有数字类型都发生除以零或以零取模的情况时,就会引发此类错误。
IO错误- 当输入/输出操作失败时会出现这种错误。
语法错误 当出现以下错误时引发 SyntaxErrors Python 语法。
缩进错误 当缩进定义不正确时会出现此错误

其他重要事项 Python 例外

特殊课程 描述
算术异常 算术错误,例如除以零。
数组索引越界异常 数组索引超出范围。
ArrayStoreException 赋值可帮助您获得不兼容类型的数组元素。
类转换异常 演员阵容无效
MlegalMonitorStateException 非法监视操作,例如等待未锁定的线程。
法律状态异常 环境或应用程序处于错误状态。
类未找到异常 未找到类别。
克隆不支持异常 尝试克隆未实现 Cloneable 接口的对象。
非法访问异常 拒绝访问课程。
实例化异常 当您尝试创建接口或抽象类的对象时发生。
克隆不支持异常 尝试克隆未实现接口的对象。

错误与异常

误差 例外
所有错误 Python 是未经检查的类型。 异常包括已检查类型和未检查类型。
运行时发生编译器未知的错误。 可以借助 try-catch 块来处理异常,从而恢复异常。
错误大多是由应用程序运行的环境引起的。 应用程序本身导致异常。
例子:
内存不足错误
例子:
检查异常、SQL异常、NullPointerException等。

总结

  • 异常是在程序执行过程中发生的错误。
  • 异常表明,尽管该事件有可能发生,但是这种类型的事件并不经常发生。
  • 异常的常见例子有 1)除以零,2)访问不存在的文件,3)添加两种不兼容的类型。
  • 一个例外是 Python 代表错误的对象。
  • try 语句包括关键字 try,后跟冒号 (:) 和一组可能发生异常的代码。它有一个或多个子句。
  • Catch 块每次接受一个参数,这是它可能捕获的异常类型。
  • raise 语句指定初始化异常对象的参数。
  • 最后,无论是否引发异常,块总是会执行。