掌握Python中的异常处理函数:try、except和finally
Python是一种动态类型的高级编程语言,它提供了一种简单而又易于理解的方式来编写可读性高、模块化的代码。
与其他流行的编程语言一样,Python提供了异常处理机制,帮助我们在程序处理过程中捕获并处理错误。在本篇文章中,我们将重点介绍Python 中的异常处理函数——try、except和finally,并给出一些实际应用的例子。
一、try语句
在Python中使用try-except语句的一般形式如下:
try:
#该块中放置可能会抛出异常的代码
except:
#如果发生异常,执行该块中的代码
try语句是异常处理的 步。简单来说,try语句就是Python中的“尝试”语句,它试图执行一些代码,如果代码正常执行,那么Python继续执行剩余的程序。但是如果try语句发现了“错误”,它就会引发异常。
当Python运行代码时,遇到异常,默认情况下,程序会停止运行,并将错误信息返回给用户。如果在程序的关键部分,如文件读取或数据库连接时发生错误,程序可能会崩溃或停止响应。
有了try-except语句,我们可以在程序中捕获这些错误,从而避免程序崩溃并使代码更加健壮。
二、except语句
在try语句的情况下,except语句是当我们捕获到异常时,要执行的代码块。except语句后面可以跟一个或多个异常类型,如果捕获到任何一个这些异常类型,except语句就会被执行。
下面是一个简单的示例,演示了如何使用try-except语句处理异常:
try:
x = 1/0
print("没有异常")
except ZeroDivisionError:
print("出现除数为0的异常")
输出:出现除数为0的异常
在该示例中,我们故意制造了一个除以0的异常。因此,except语句被触发,并输出“出现除数为0的异常”。
三、finally语句
在try-except语句的末尾,finally语句总是会被执行,不管try块中是否发生了异常。如果没有异常,finally语句依然会被执行。
finally语句通常用于释放资源,例如关闭已打开的文件或释放已经分配的内存。请看下面的示例:
try:
file = open("sample.txt", "w")
file.write("Hello World!")
except:
print("写文件时发生异常")
finally:
file.close()
print("文件已关闭")
输出:文件已关闭
在该示例中,我们打开一个文件并写入“Hello World”。如果在写文件过程中发生了异常,except语句将被执行。始终确保在关闭文件之前调用finally语句。
四、捕获多个异常类型
在except语句中,我们可以指定多个异常类型,以捕获不同类型的错误。例如:
try:
a = 10 / 0
b = int("hello")
except ZeroDivisionError:
print("ZeroDivisionError:除数为零")
except ValueError:
print("ValueError:无效的数字字符串")
输出:ZeroDivisionError:除数为零
在该示例中,我们故意制造两个错误:一个是除数为0的异常,另一个是无效的数字字符串。由于我们在except语句中只指定了捕获ZeroDivisionError的异常类型,因此只有 个异常被捕获并输出。
五、捕获所有异常
如果我们想捕获所有Python异常,我们可以在except语句中使用一个通配符(*)。例如:
try:
a = 10 / 0
b = int("hello")
except Exception as e:
print("发生异常:", str(e))
输出:发生异常: division by zero
在该示例中,我们使用Exception来捕获所有异常。除了这个通配符,Python还提供了其他预定义的异常类型。例如,AttributeError、TypeError、NameError等等,他们分别和不同的异常情况相关。
六、完整代码示例
下面是一个完整示例:它从一个文件中读取数字,计算总和,然而读取文件或计算总和时可能发生异常。捕获异常并打印出错误消息。
try:
f = open('numbers.txt', 'r')
num_list = f.readlines()
total = sum([int(num.strip()) for num in num_list])
f.close()
print("Total: ", total)
except FileNotFoundError:
print("File not found")
except ValueError:
print("Invalid number in file")
except Exception as e:
print("An unexpected exception occurred:", str(e))
finally:
print("Execution completed")
在该示例中,我们使用了try-except-finally语句来打开一个文件、读取数字、计算它们的总和、关闭文件以及提示执行完毕。程序中有三个except语句,捕获FileNotFoundError、ValueError和所有其他异常类型。
最后,finally语句用于确保文件被正确关闭。
总结
异常处理是编写Python程序时必不可少的一部分。try、except和finally语句是Python提供的用于处理这些异常的关键字。当我们编写更大的程序时,使用这些语句将使我们的程序更加稳健,并能够更好地处理意外情况。
