Python 异常处理:try、catch、finally 和 raise [示例]
什么是 Python 中的异常处理?
异常是在程序执行时发生的错误。但是,在运行程序时,Python 会生成一个异常,应该对其进行处理以避免程序崩溃。在 Python 语言中,异常会在错误时自动触发,也可以由您的代码触发和拦截。
异常表明,尽管事件可能发生,但这种类型的事件很少发生。当方法不能处理异常时,它会被抛出给它的调用者函数。最终,当主函数抛出异常时,程序突然终止。
在本 Python 异常处理教程中,您将学习到:
- 什么是 Python 中的异常?
- 常见异常示例
- 为什么要使用异常?
- 例外规则
- Python 异常处理机制
- Python Try 语句
- Python Catch 语句
- Python 中的引发语句
- 重要的 Python 错误
- 其他重要的 Python 异常
- 错误与异常
常见异常示例:
- 除以零
- 访问一个不存在的文件。
- 添加了两种不兼容的类型
- 试图访问不存在的序列索引
- 从断开连接的数据库服务器中删除表。
- ATM 取款超过可用金额
为什么要使用异常?
以下是在 Python 中使用异常的原因:
- 异常处理允许您将错误处理代码与正常代码分开。
- 异常是表示错误的 Python 对象。
- 与代码注释一样,异常可以帮助您提醒自己程序的期望。
- 它使代码更清晰并增强了可读性。
- 当错误处理发生在一个地方以一种方式发生时,您可以激发后果。
- 异常是处理错误消息的便捷方法。
- 在 Python 中,您可以使用 raise exception 方法在程序中引发异常。
- 引发异常可帮助您中断当前代码执行并将异常返回到预期状态,直到它被处理。
- 处理无法直接处理的组件的异常。
例外规则
以下是 Python 异常处理的一些基本规则:
- 异常必须是类对象
- 对于类异常,您可以将 try 语句与提及特定类的 except 子句一起使用。
- 即使语句或表达式在语法上是正确的,当尝试执行它时也可能会显示错误。
- 在执行过程中发现的错误称为异常,它们不是无条件致命的。
Python 异常处理机制
异常处理由以下 5 个关键字管理:
- 试试
- 赶上
- 终于
- 投掷
Python Try 语句
一条 try 语句包括关键字 try,后跟一个冒号 (:) 和一套可能发生异常的代码。它有一个或多个子句。
在 try 语句的执行过程中,如果没有发生异常,解释器将忽略该特定 try 语句的异常处理程序。
如果在 try 套件中发生任何异常,则该 try 套件会过期,并且程序控制会转移到该 try 套件之后的匹配的 except 处理程序。
Syntax: try: statement(s)
catch 语句
Catch 块一次接受一个参数,这是它可能捕获的异常类型。这些参数的范围可以从可以变化的特定类型的异常到包罗万象的异常类别。
catch 块规则:
- 你可以使用关键字catch来定义一个catch块
- Catch Exception 参数总是用括号括起来
- 它始终表示 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 块总是执行。 final 关键字允许您创建一个跟随 try-catch 块的代码块。
最后,从句是可选的。它旨在定义应在所有条件下执行的清理操作。
try: raise KeyboardInterrupt finally: print 'welcome, world!' Output Welcome, world! KeyboardInterrupt
最后,子句在try语句之前执行。
Python 中的引发语句
raise 语句指定初始化异常对象的参数。在这里,一个逗号跟在异常名称后面,以及跟在逗号后面的参数或参数的元组。
语法:
raise [Exception [, args [, traceback]]]
在这种语法中,参数是可选的,在执行的时候,异常参数的值总是none。
示例:
Python 异常可以是任何值,例如字符串、类、数字或对象。大多数由 Python 核心引发的异常都是带有参数的类,该参数是类的实例。
重要的 Python 错误
错误类型 | 说明 |
---|---|
算术错误 | ArithmeticError 充当所有算术异常的基类。它是针对算术运算中的错误而引发的。 |
导入错误 | ImportError 在您尝试导入不存在的模块时引发。如果您输入错误的模块名称或标准路径中不存在的模块,则会发生这种异常。 |
索引错误 | 当您尝试引用超出范围的序列时会引发 IndexError。 |
密钥错误 | 当在字典中找不到特定键时,会引发 KeyError 异常。 |
名称错误 | 当在本地或全局命名空间中不存在的代码中引用了名称时,会引发 NameError。 |
值错误 | 当函数或内置操作接收到可能是正确类型但没有合适值的参数时,会引发值错误。 |
EOF错误 | 当内置函数之一(input() 或 raw_input())在没有读取任何数据的情况下达到 EOF 条件时会引发此类错误。 |
ZeroDivisonError | 这种类型的错误是在所有数字类型发生除零或模数为零时引发的。 |
IOError- | 当输入/输出操作失败时会出现这种错误。 |
语法错误 | Python 语法出错时引发 SyntaxErrors。 |
缩进错误 | 缩进未正确定义时引发此错误 |
其他重要的 Python 异常
异常 | 说明 |
---|---|
算术异常 | 算术错误,例如被零除。 |
ArrayIndexOutOfBoundsException | 数组索引超出范围。 |
ArrayStoreException | Assignment 帮助你对不兼容类型的数组元素进行赋值。 |
ClassCastException | 无效的演员表 |
MlegalMonitorStateException | 非法的监视器操作,例如等待未锁定的线程。 |
MlegalStateException | 环境或应用程序处于错误状态。 |
ClassNotFoundException | 找不到类。 |
CloneNotSupportedException | 尝试克隆一个没有实现 Cloneable 接口的对象。 |
非法访问异常 | 对类的访问被拒绝。 |
实例化异常 | 当您尝试创建接口或抽象类的对象时发生。 |
CloneNotSupportedException | 尝试克隆一个没有实现接口的对象。 |
错误与异常
错误 | 例外情况 |
---|---|
Python 中的所有错误都是未经检查的类型。 | 异常包括选中和未选中类型。 |
运行时发生编译器未知的错误。 | 可以借助 try-catch 块处理异常来恢复它们。 |
错误大多是由应用程序运行的环境引起的。 | 应用程序本身导致异常。 |
示例: OutofMemoryError | 示例: Checked Exceptions、SQL exception、NullPointerException等 |
总结
- 异常是程序执行过程中发生的错误。
- 该异常表明,虽然该事件可能发生,但此类事件很少发生。
- 常见的异常示例有 1) 除以零,2) 访问不存在的文件,3) 添加两种不兼容的类型。
- 异常是表示错误的 Python 对象。
- try 语句包括关键字 try,后跟一个冒号 (:) 和一组可能发生异常的代码。它有一个或多个子句。
- Catch 块一次接受一个参数,这是它可能捕获的异常类型。
- raise 语句指定初始化异常对象的参数。
- 最后,无论是否抛出异常,block 总是会执行。
Python