如果在Python中引发特定的系统出口,则继续执行for循环



我有一个函数有多个sys.exit()异常。我正在迭代调用该函数,并希望如果在为所有其他函数出错时引发某个sys.exit(),则循环继续。示例代码可以类似于:

def exit_sample(test):
if test == 'continue':
sys.exit(0)
else:
sys.exit("exit")
list = ["continue", "exit", "last"]
for l in list:
try:
exit_sample(l)
except SystemExit:
print("Exception 0")

在当前表单中,代码不会出错,但每次都会打印"异常0"。我希望它第一次不出错,然后在l="0"时退出;退出";。如何做到这一点?

您可以捕获异常,检查它是否为continue的正当性,如果不是,则重新引发它。

import sys
def exit_sample(test):
if test == 'continue':
sys.exit(0)
else:
sys.exit("exit")
lst = ["continue", "exit", "last"]
for l in lst:
try:
exit_sample(l)
except SystemExit as ex:      # catch the exception to variable
if str(ex) == "0":        # check if it is one that you want to continue with
print("Exception 0")
else:                     # if not re-raise the same exception.
raise ex

将异常存储在变量中,并检查代码(或其他特征(是否符合继续代码的条件。我修改了你的代码,如果退出代码为0,它将继续,否则将重新引发系统退出

import sys
def exit_sample(test):
if test == 'continue':
sys.exit(0)
else:
sys.exit("exit")
list = ["continue", "exit", "last"]
for l in list:
try:
exit_sample(l)
except SystemExit as exc:
if exc.code == 0:
print("continuing")
else:
# raise previous exception
raise

您想要的是将异常转换为字符串,并将其与"退出";。查看它是否有效后,您可以删除打印语句。

import sys
def exit_sample(test):
if test == 'continue':
sys.exit(0)
else:
sys.exit("exit")
list = ["continue", "exit", "last"]
for l in list:
try:
exit_sample(l)
except SystemExit as error:
print(error)
if str(error) == "exit":
sys.exit("foo")

最新更新