Python中如何在循环调用含多sys.exit()的函数时,仅特定退出码触发循环继续其余则终止程序
区分SystemExit异常,实现按需循环/终止
嘿,这个问题的关键在于识别SystemExit异常携带的退出参数——你调用sys.exit(xxx)时,xxx会被作为异常对象的args属性保存下来,我们可以通过检查这个值来区分不同的退出场景,进而实现你的需求。
修改后的完整代码
import sys def exit_sample(test): if test == 'continue': sys.exit(0) else: sys.exit("exit") # 注意:别用`list`当变量名,会覆盖Python内置的list类型 test_items = ["continue", "exit", "last"] for item in test_items: try: exit_sample(item) except SystemExit as e: # 取出sys.exit传入的参数 exit_code = e.args[0] if exit_code == 0: # 符合继续循环的条件,跳过当前循环进入下一次 print("触发continue场景,继续下一次循环") continue else: # 不符合,重新抛出异常终止程序 print("触发exit场景,终止程序") raise
执行逻辑说明
- 第一次循环(
item="continue"):sys.exit(0)抛出SystemExit,捕获后检查到exit_code是0,执行continue,直接进入下一次循环,不会终止程序 - 第二次循环(
item="exit"):sys.exit("exit")抛出SystemExit,捕获后exit_code不是0,我们重新抛出这个异常,程序会直接终止,第三次循环根本不会执行
小提醒
别用list作为变量名哦,这会覆盖Python自带的list类型,后续如果需要创建列表可能会出问题,我把变量改成了test_items。
内容的提问来源于stack exchange,提问作者confused_certainties
相关产品推荐
相关产品推荐

