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