为增强程序的健壮性,我们也需要考虑异常处理方面的内容。例如,在读取文件时需要考虑文件不存在、文件格式不正确等异常情况。这就是本章要介绍的异常处理。
在Python中,异常处理是一种重要的编程技术,用于处理程序运行时发生的错误。Python提供了几个内置的异常类型,如ZeroDivisionError
、TypeError
、ValueError
等,同时也允许用户自定义异常类型。
异常处理主要通过try
、except
、finally
和raise
关键字实现。下面是异常处理的基本框架:
try:
# 尝试执行的代码块
...
except ExceptionType:
# 当在try部分的代码块中发生ExceptionType类型的异常时执行
...
finally:
# 无论是否发生异常,都会执行的代码块
...
其中,ExceptionType
可以是Python内置的异常类型,也可以是用户自定义的异常类型。在try
代码块中,如果发生异常,程序会立即跳转到对应的except
代码块中执行。如果没有异常发生,则执行完try
代码块后跳过except
代码块。无论是否发生异常,finally
代码块中的代码总是会被执行。
除了使用try
、except
和finally
关键字外,还可以使用raise
关键字显式地抛出异常。例如:
raise ExceptionType("error message")
这会抛出一个类型为ExceptionType
的异常,并附带一条错误消息。
在数学中,任何整数都不能除以0,如果在计算机程序中将整数除以0,则会引发异常。
示例代码如下:
通过Python指令运行文件,输出结果:
我们不能防止用户输入0,但在出现异常后我们能捕获并处理异常,不至于让程序发生终止并退出。亡羊补牢,为时未晚。
异常捕获是通过try-except语句实现的,基本的try-except语句的语法如下。
在try代码块中包含在执行过程中可能引发异常的语句,如果没有发生异常,则跳到except代码块执行,这就是异常捕获。
try-except语句的执行流程如下。
示例代码如下:
通过Python指令运行文件,输出结果:
从运行的结果可以看出,在输入数字0后,异常发生,跳到except代码块执行。
将示例代码修改如下:
通过Python指令运行文件,输出结果:
多条语句可能会引发多种不同的异常,对每一种异常都会采用不同的处理方式。针对这种情况,我们可以在一个try后面跟多个except代码块,语法如下:
示例代码如下:
通过Python指令运行文件,输出结果:
示例代码如下:
通过Python指令运行文件,输出结果:
try-except语句还可以嵌套,修改10.2.2节的示例代码如下:
通过Python指令运行文件,输出结果:
有时在try-except语句中会占用一些资源,例如打开的文件、网络连接、打开的数据库及数据结果集等都会占用计算机资源,需要程序员释放这些资源。为了确保这些资源能够被释放,可以使用finally代码块。
在try-except语句后面还可以跟一个finally代码块,语法如下:
无论是try代码块正常结束还是except代码块异常结束,都会执行finally代码块。
实现自定义异常类的示例代码如下:
示例代码如下:
通过Python指令运行文件,输出结果:
1 请列举一些常见的异常。
2 手动引发异常的语句有哪些?()
A.throw
B.raise
C.try
D.except
3 判断对错:(请在括号内打√或×,√表示正确,×表示错误)。
1)每个try代码块都可以伴随一个或多个except代码块,用于处理try代码块中所有可能引发的异常。()
2)为了确保这些资源被释放,可以使用finally代码块。()
3)实现自定义异常类时,需要继承Exception类或其子类。()
4)为了提供程序的健壮性,我们应该对所有类型异常都进行捕获。()
5)一个整数除以0时会引发ValueError异常。()
异常处理是编程中的一个重要概念,它允许我们为可能出现的错误或异常情况做好准备,并采取适当的措施来处理这些异常。以下是关于异常处理的一些总结性观点:
错误和异常: 在编程中,错误和异常通常是指预料之外的运行时事件。这些事件可能导致程序无法正常运行,比如尝试打开不存在的文件、除以零等。
异常处理的重要性: 异常处理可以帮助我们编写更健壮、更可靠的代码。通过捕获和处理异常,我们可以防止程序在遇到问题时崩溃,而是提供有用的错误信息或者执行其他适当的操作。这也有助于开发人员更快地找到和修复问题。
Python中的异常处理: Python有一套完整的异常处理机制,包括内置的异常类型(例如ValueError
、TypeError
等)和自定义异常类型。可以使用try
/except
块来捕获和处理异常。
try/except块: try
/except
块是Python中处理异常的主要方式。在try
块中,我们尝试执行一些代码,如果在执行过程中发生异常,控制流将立即转移到except
块,而不会执行try
块之后的任何代码。
finally块: finally
块包含那些无论是否发生异常都需要执行的代码。这可以用来清理资源,例如关闭文件或者网络连接。
引发异常: 除了处理异常,Python还允许我们主动引发异常。这可以通过raise
关键字实现,我们可以用它来抛出任何我们想要的异常。
异常链: 如果一个异常在处理过程中又引发了另一个异常,那么后一个异常将被“封装”在第一个异常中,形成异常链。可以使用.cause
和.context
属性来访问异常链。
清理资源: 在Python中,使用上下文管理器(也称为with语句)可以自动清理资源,例如文件和锁等。当with语句结束时,Python会自动调用上下文管理协议中的所有方法,确保资源被正确清理。
自定义异常类型: Python允许我们定义自己的异常类型,这可以用来表示特定程序中可能出现的特定问题。我们可以通过继承内置的Exception类来创建自定义异常类型。
异常处理最佳实践:
except
块中捕获太多类型的异常,这可能会隐藏一些错误信息。通过合理使用异常处理,可以大大提高代码的可靠性和可维护性。