鱼C论坛

 找回密码
 立即注册
查看: 1906|回复: 4

[技术交流] 【Python】如何阻止try语句块中的代码运行?只要你够快!

[复制链接]
发表于 2020-3-28 14:11:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 烟肖雨晨 于 2020-3-28 14:14 编辑

对Python有一定基础的都应该知道,try-except-finally语句块中如果有finally块,那么无论结果如何都会执行finally里的内容。那么我们就可以借助Python的这个机制,跑掉一些语句。
最近看到了两个主题帖,感觉都挺有意思的,下面是我就如何从try语句块中跑掉一句代码的方法。
一个实验:
def func():
        try:
                raise KeyError
        except:
                return "没跑掉"
        finally:
                print("跑了")
运行结果:
>>> func()
跑了
'没跑掉'
这就说明了:在try语句块中,如果有finally,而try或者except中又有阻止finally中语句运行的句子,会先执行finally中语句后再返回来执行。
还有一个例子:
def func():
        try:
                raise KeyError
        except:
                return "没跑掉"
        finally:
                print("跑了")
                return "跑了"
结果是:
>>> func()
跑了
'跑了'
这就说明:如果在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语句,所以就直接返回了(并不会再跳回去执行)。因此,我们可以实现让语句“跑掉”。

如果还不理解,可以去看一下“一个账号”的主题帖:传送门
以及“永恒的蓝色梦想”的主题帖:传送门
感谢这两位大佬告诉我这些东西!

本人萌新,如有语言表述不太恰当或者有误之处,烦请指出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-28 14:14:53 | 显示全部楼层
emmmmm
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-28 14:16:15 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-28 14:27:32 | 显示全部楼层

emmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-28 15:28:54 | 显示全部楼层
_2_ 发表于 2020-3-28 14:27
emmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-25 05:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表