Python 异常处理:try, catch, finally & raise [示例]

Python 中的异常处理是什么?

异常是在程序执行期间发生的错误。但是,在运行程序时,Python 会生成一个异常,该异常应得到处理,以避免程序崩溃。在 Python 语言中,异常会在错误时自动触发,也可以由您的代码触发和拦截。

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

异常的常见示例

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

为什么要使用异常?

以下是在 Python 中使用异常的原因

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

异常规则

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

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

Python 异常处理机制

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

  1. try
  2. catch
  3. finally
  4. throw

Python Try 语句

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

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

如果 try 块中发生任何异常,则 try 块将退出,程序控制将转移到 try 块之后的匹配 except 处理程序。

Syntax:
try:
statement(s)

catch 语句

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());
}

Python 中的 Finally 语句

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

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

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

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

Python 中的 Raise 语句

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

语法

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

在此语法中,参数是可选的,在执行时,异常参数值始终为 None。
示例
Python 异常可以是任何值,如字符串、类、数字或对象。Python 核心引发的大多数异常都是类,其参数是该类的实例。

重要的 Python 错误

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

其他重要的 Python 异常

Exception 描述
ArithmeticException 算术错误,例如除以零。
ArraylndexOutOfBoundsException 数组索引越界。
ArrayStoreException 赋值给数组元素不兼容的类型。
ClassCastException 无效的类型转换
MlegalMonitorStateException 非法监视器操作,例如在未锁定的线程上等待。
MlegalStateException 环境或应用程序处于错误状态。
ClassNotFoundException 找不到类。
CloneNotSupportedException 尝试克隆未实现 Cloneable 接口的对象。
Illegal AccessException 拒绝访问类。
InstantiationException 尝试创建接口或抽象类的对象时发生。
CloneNotSupportedException 尝试克隆未实现接口的对象。

错误与异常

错误 例外
Python 中的所有错误都是未检查类型。 异常包括已检查和未检查类型。
错误发生在运行时,编译器不知道。 可以通过 try-catch 块处理异常。
错误大多是由应用程序运行的环境引起的。 应用程序本身会导致异常。
示例
OutofMemoryError
示例
已检查异常、SQL 异常、NullPointerException 等。

摘要

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