对Python中的try、except、finally 执行顺序详解
在Python中,try、except和finally是我们常用的异常处理方式,有一个清晰的执行顺序很重要。在这篇攻略中,我们将详细探讨这些关键字的执行顺序,以便更有效地处理异常。
try、except和finally
先回顾一下这些关键字的含义和用途:
- try:执行可能会抛出异常的代码块;
- except:当try代码块中出现了异常,执行此代码块中的代码;
- finally:无论try代码块中是否有异常,都会执行此代码块中的代码。
执行顺序
下面我们来具体分析try、except和finally的执行顺序。我们先来看一个最简单的try-except语句:
try:
print(1 / 0)
except:
print("发生异常")
执行结果如下:
发生异常
从上面的例子中,我们可以看出try代码块中出现了异常,于是执行了except代码块中的代码。注意到这里的except没有指定具体的异常类型,这意味着它可以捕获所有类型的异常。
接下来,我们添加一个finally代码块,看看它的执行顺序:
try:
print(1 / 0)
except:
print("发生异常")
finally:
print("finally执行")
执行结果如下:
发生异常
finally执行
从上面的例子中,我们发现try代码块中出现了异常,因此首先执行except代码块中的代码;然后,无论我们是否出现异常,都会执行finally代码块中的代码。
再来看一个稍微复杂一点的例子:
try:
print("try执行")
raise Exception
except:
print("except执行")
finally:
print("finally执行")
执行结果如下:
try执行
except执行
finally执行
从上面的例子中,我们发现try代码块中执行了一些操作,然后抛出了一个异常。因为我们没有指定具体的异常类型,所以except代码块能捕获所有类型的异常。except代码块中的代码被执行之后,finally代码块也被执行。这就是try、except和finally关键字的执行顺序。
注意事项
最后,我们需要特别注意几个要点:
-
只有try和finally的语句是互相配对的,可以单独出现。try语句可以单独出现,但finally语句不能单独出现,必须和try语句相配对。
-
try语句中可以只有try语句,也可以拥有多个except、一个else和一个finally,但except、else和finally块的顺序是固定的。
-
可以通过raise语句在任何位置手动触发异常,从而在代码中添加自定义的异常处理逻辑。
示例说明
现在,我们来看两个更为详细的示例:
- 简单的异常处理
try:
x = int(input("输入一个数字: "))
print(x)
except ValueError:
print("Oops! 输入不是一个数字。 请再试一次......")
finally:
print("我们一直在这里......")
执行结果:
输入一个数字: 1
1
我们一直在这里......
从上面的例子可以看出:try语句中的代码块出现了一个异常,我们使用except ValueError捕获了它,并输出了一条消息。最后,无论有没有出现异常,finally语句都会得到执行。
- 自定义的异常处理
class MoneyError(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
def get_money(money):
if money < 0:
raise MoneyError("金额不能小于0")
try:
get_money(-1)
except MoneyError as me:
print(me)
finally:
print("我们一直在这里......")
执行结果:
金额不能小于0
我们一直在这里......
从上面的例子可以看出,我们自定义了一个异常类MoneyError,并使用raise语句抛出了这个异常。在try语句中调用get_money(-1)后抛出了这个异常,except MoneyError捕获了它并输出了一条错误消息。finally语句也得到了执行。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:对python中的try、except、finally 执行顺序详解 - Python技术站