Python 异常处理:try, catch, finally & raise [示例]
Python 中的异常处理是什么?
异常是在程序执行期间发生的错误。但是,在运行程序时,Python 会生成一个异常,该异常应得到处理,以避免程序崩溃。在 Python 语言中,异常会在错误时自动触发,也可以由您的代码触发和拦截。
异常表明,尽管该事件可能发生,但这种类型的事件很少发生。当方法无法处理异常时,它会被抛给其调用函数。最终,当异常从主函数中抛出时,程序会突然终止。
异常的常见示例
- 除以零
- 访问不存在的文件。
- 两个不兼容类型相加
- 尝试访问序列中不存在的索引
- 从断开连接的数据库服务器中移除表。
- ATM 取款金额超过可用金额
为什么要使用异常?
以下是在 Python 中使用异常的原因
- 异常处理允许您将错误处理代码与正常代码分开。
- 异常是表示错误的 Python 对象。
- 与代码注释一样,异常可以帮助您提醒自己程序预期什么。
- 它使代码更清晰,提高了可读性。
- 允许您模拟后果,因为错误处理在一个地方以一种方式进行。
- 异常是处理错误消息的便捷方法。
- 在 Python 中,您可以使用 raise exception 方法在程序中引发异常。
- 引发异常有助于中断当前代码执行,并将异常返回给异常,直到它被处理。
- 处理无法直接处理的组件的异常。
异常规则
以下是 Python 异常处理的一些基本规则
- 异常必须是类对象
- 对于类异常,您可以使用带有特定类名称的 except 子句的 try 语句。
- 即使语句或表达式在语法上是正确的,在尝试执行它时也可能会显示错误。
- 执行期间发现的错误称为异常,它们并非必然是致命的。
Python 异常处理机制
异常处理由以下 5 个关键字管理
- try
- catch
- finally
- 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 块始终执行。