【Python】Python中的异常处理
在Python中,异常处理是一种重要的编程技术,用于处理程序执行过程中可能出现的错误或异常情况。通过使用try
、except
、else
和finally
关键字,可以有效地管理这些异常,确保程序的稳定性和健壮性。
基本结构
一个基本的异常处理结构如下所示:
try:
# 尝试执行的代码块
pass
except ExceptionType:
# 当try中的代码抛出ExceptionType类型的异常时执行的代码
pass
else:
# 如果try中的代码没有抛出任何异常,则执行else中的代码
pass
finally:
# 无论是否发生异常都会执行的代码
pass
示例
1. 捕获特定异常
当你知道可能会出现特定类型的异常时,可以通过指定异常类型来捕获它。例如,尝试从列表中访问一个不存在的索引会引发IndexError
:
my_list = [1, 2, 3]
try:
print(my_list[5]) # 尝试访问不存在的索引
except IndexError:
print("尝试访问了列表中不存在的索引")
2. 捕获多个异常
如果一段代码可能引发多种类型的异常,可以在except
后跟多个异常类型,用元组包裹起来:
try:
x = 1 / 0 # 这将引发ZeroDivisionError
except (ZeroDivisionError, TypeError) as e:
print(f"发生了一个错误: {e}")
3. 使用else子句
else
子句会在try
块没有引发异常时执行:
try:
x = 1 / 2 # 正常计算
except ZeroDivisionError:
print("除数不能为零")
else:
print(f"结果是: {x}")
4. 使用finally子句
无论是否发生异常,finally
子句中的代码都会被执行,通常用于清理工作,如关闭文件等:
try:
f = open("example.txt", "r")
content = f.read()
except FileNotFoundError:
print("文件未找到")
finally:
try:
if f:
f.close()
except NameError:
pass
5. 抛出异常
有时候,你可能需要手动抛出异常。这可以通过使用raise
语句来完成:
def check_age(age):
if age < 0:
raise ValueError("年龄不能为负数")
elif age > 150:
raise ValueError("年龄过高,可能是输入错误")
try:
check_age(-1)
except ValueError as e:
print(e)
以上就是Python中异常处理的一些基本概念和示例。通过合理地使用异常处理机制,可以使你的代码更加健壮,能够更好地应对不可预见的情况。
比如,Python字符串或者列表中的index()
函数,如果找不到()中的值
它会直接抛出
ValueError: substring not found
的错误
如果我们想要它不抛异常从而强制停止程序的运行,我们可以对其进行异常处理:
s='Hello World!'
try:
print(s.index('a'))
except ValueError:
print("目标未找到!")
# 输出:
# 目标未找到!