马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 烟肖雨晨 于 2020-3-28 14:14 编辑
对Python有一定基础的都应该知道,try-except-finally语句块中如果有finally块,那么无论结果如何都会执行finally里的内容。那么我们就可以借助Python的这个机制,跑掉一些语句。
最近看到了两个主题帖,感觉都挺有意思的,下面是我就如何从try语句块中跑掉一句代码的方法。
一个实验:def func():
try:
raise KeyError
except:
return "没跑掉"
finally:
print("跑了")
运行结果:这就说明了:在try语句块中,如果有finally,而try或者except中又有阻止finally中语句运行的句子,会先执行finally中语句后再返回来执行。
还有一个例子:def func():
try:
raise KeyError
except:
return "没跑掉"
finally:
print("跑了")
return "跑了"
结果是:这就说明:如果在try语句块中,try或者except,和finally中的语句都包含return语句,会先执行finally中的return。而函数一旦遇到return语句就结束,因此try或except中的return语句将不会被正常执行。
再总结一下:
①在try-except-finally语句块中,finally中的无论如何都会被执行(不会被其他进程中断),Python有机制保证它运行。
②如果在try-except-finally语句块中,try或者except内有return语句时(或者其他能阻止finally中的语句执行的语句),就不会先执行这句语句,而会先执行finally中的语句,再返回来继续执行。
③如果在try-except-finally语句块中,try或者except内有return语句,且finally中也有return语句时,一旦try或者except中的return语句即将被执行,就会跳到finally中(因为要保证finally中的代码一定被执行)。而这时finally中又有return语句,所以就直接返回了(并不会再跳回去执行)。因此,我们可以实现让语句“跑掉”。
如果还不理解,可以去看一下“一个账号”的主题帖:传送门
以及“永恒的蓝色梦想”的主题帖:传送门
感谢这两位大佬告诉我这些东西!
本人萌新,如有语言表述不太恰当或者有误之处,烦请指出。 |