Python中如何像函数那样退出exec()执行?
解决exec中无法用return退出的问题
你可以用以下两种方式替代return,实现仅终止exec内代码执行的效果:
方法1:用单次循环+break
把exec里的代码包裹在一个只执行一次的while True循环中,需要退出的地方用break跳出循环,就能终止exec内的代码运行:
# 示例算法字符串 algorithm = """ while True: if a: do_something() break if b: do_something_else() break # 其他后续逻辑 break # 正常执行完也要加break退出循环 """ # 在外层函数中执行 def outer_func(): a = True def do_something(): print("执行do_something") exec(algorithm) outer_func()
原理是这个循环只会执行一轮,break会直接终止循环,也就停止了exec内剩余代码的执行,和return的效果类似,且不会影响外层函数。
方法2:自定义异常+捕获
通过抛出一个自定义异常,在外层捕获来终止exec的执行:
# 定义自定义异常 class ExitExec(Exception): pass def outer_func(): a = False b = True def do_something_else(): print("执行do_something_else") algorithm = """ if a: do_something() raise ExitExec if b: do_something_else() raise ExitExec # 其他后续逻辑 """ try: exec(algorithm) except ExitExec: pass # 捕获异常后什么都不做,直接终止exec逻辑 outer_func()
这种方式通过异常机制中断exec内的代码流,外层捕获后不会影响整个程序的运行。
需要注意的是,Python里没有专门用来终止exec执行的关键字,上面两种是最常用的替代方案。
内容的提问来源于stack exchange,提问作者Marcocorico
相关产品推荐
相关产品推荐

