Python中的异常处理2025年4月21日 | 阅读 9 分钟 当 Python 程序遇到错误时,它会停止执行程序的其余部分。Python 中的错误可能是表达式语法中的错误,也可能是 Python 异常。我们将了解什么是异常。此外,在本教程中,我们将探讨语法错误和异常之间的区别。在此之后,我们将学习 try 和 except 块,以及如何引发异常和进行断言。然后,我们将查看 Python 异常列表。 什么是异常?Python 中的异常是在程序执行期间发生的事件,它会中断程序命令的正常流程。当 Python 代码遇到无法处理的情况时,它会引发异常。Python 中描述错误的“对象”称为异常。 当 Python 代码引发异常时,它有两种选择:立即处理异常或停止并退出。 异常与语法错误当解释器识别出有错误的语句时,就会发生语法错误。请考虑以下场景: 代码 输出 if (s != o: ^ SyntaxError: invalid syntax 输出中的箭头显示了解释器遇到语法错误的位置。在这种情况下,有一个未闭合的括号。请闭合它并重新运行程序。 代码 输出 2 string = "Python Exceptions" 4 for s in string: ----> 5 if (s != o): 6 print( s ) NameError: name 'o' is not defined 执行此代码后,我们遇到了异常错误。当语法正确的 Python 代码产生错误时,就会出现这种类型的错误。输出的最后一行指定了遇到的异常错误代码的名称。Python 不仅显示“异常错误”,而是显示有关发生的异常错误的类型的详细信息。在这种情况下,它是 NameError。Python 包含许多内置异常。然而,Python 提供了创建自定义异常的功能。 Try 和 Except 语句 - 捕获异常在 Python 中,我们使用 try 和 except 代码块来捕获和处理异常。try 子句包含可能引发异常的代码,而 except 子句包含处理异常的代码行。让我们看看是否可以访问数组的索引,该索引大于数组的长度,并处理由此产生的异常。 代码 输出 The index and element from the array is 0 Python The index and element from the array is 1 Exceptions The index and element from the array is 2 try and except Index out of range 在前面的示例中,可能产生错误的代码块被插入到 try 子句中。i 大于 2 的值尝试访问列表中不存在的、超出其长度的项,从而导致异常。然后 except 子句捕获此异常并执行代码,而不会停止程序。 如何引发异常如果一个条件不满足我们的标准,但根据 Python 解释器来说是正确的,我们可以使用 raise 关键字故意引发异常。我们可以结合使用自定义异常和该语句。 如果我们希望在给定条件发生时使用 raise 来生成异常,我们可以这样做: 代码 输出 1 num = [3, 4, 5, 7] 2 if len(num) > 3: ----> 3 raise Exception( f"Length of the given list must be less than or equal to 3 but is {len(num)}" ) Exception: Length of the given list must be less than or equal to 3 but is 4 实现停止并显示我们的异常,提供有关何处出错的指示。 Python 中的断言当我们完成程序验证时,断言是一种一致性测试,我们可以将其打开或关闭。 理解断言最简单的方法是将其与 if-then 条件进行比较。当一个表达式的计算结果为 False 时,会抛出异常。 断言通过 assert 语句进行,该语句在 Python 1.5 中作为最新关键字添加。 断言通常在函数开头用于检查有效输入,在调用函数结束时用于检查有效输出。 assert 语句Python 在找到 assert 语句时会检查相邻的表达式,最好是 True。如果表达式的结果为 False,Python 会引发 AssertionError 异常。 assert 子句的语法是: 如果断言失败,Python 会将 AssertionError 的参数用作 ArgumentException。我们可以使用 try-except 子句来捕获和处理 AssertionError 异常,但如果它们不存在,程序将停止,Python 解释器将生成一个回溯。 代码 输出 7 #Calling function and passing the values ----> 8 print( square_root( 36 ) ) 9 print( square_root( -36 ) ) Input In [23], in square_root(Number) 3 def square_root( Number ): ----> 4 assert ( Number < 0), "Give a positive integer" 5 return Number**(1/2) AssertionError: Give a positive integer Try 配合 Else 子句Python 还支持 else 子句,它应该出现在每个 except 子句之后,在 try 和 except 块中。仅当 try 子句未能引发异常时,Python 解释器才会继续执行 else 块。 下面是一个带有 else 子句的 try 子句的示例。 代码 输出 0.25 We cannot divide by zero Python中的Finally关键字Python 提供了 finally 关键字,它始终在 try-except 块之后使用。无论 try 块正常终止还是因其他原因终止,finally 代码块始终会被执行。 下面是 finally 关键字与 try-except 子句的示例: 代码 输出 Atepting to divide by zero This is code of finally clause 用户定义的异常通过继承标准内置异常的类,Python 还允许我们设计自定义异常。 下面是 RuntimeError 的一个示例。在这种情况下,会创建一个派生自 RuntimeError 的类。一旦检测到异常,我们就可以使用它来显示更详细的信息。 我们在 try 块中引发用户定义的异常,然后在 except 块中处理该异常。使用变量 var 创建了一个 EmptyError 类的示例。 代码 输出 2 try: ----> 3 raise EmptyError( "The variable is empty" ) 4 except (EmptyError, var): EmptyError: The variable is empty Python 异常列表以下是 Python 内置异常的完整列表。
总结在学习了语法错误和异常的区别之后,我们学习了引发、捕获和处理 Python 异常的各种方法。在本教程中,我们学习了这些子句:
以下是 try、except、else 和 finally 子句的语法。 语法 下一个主题如何在 Python 中捕获多个异常 |
我们请求您订阅我们的新闻通讯以获取最新更新。