对于解析脚本,我需要在很多地方使用try尝试除了块。我以为我可以使用通用函数,该函数使用需要评估的表达式作为参数。
我不能直接将表达式用作参数,因为在输入try除了块之前它可以输入错误:
def exception(a, nr_repeat=5):
if nr_repeat != 0:
try:
a
nr_repeat = 0
except ExceptionType:
exception(a, nr_repeat-1)
所以,我开始传递a,表达式作为字符串进行求值,并使用exec:
def exception(a, nr_repeat=5):
if nr_repeat != 0:
try:
exec(a)
nr_repeat = 0
except ExceptionEx:
exception(a, nr_repeat-1)
如果表达式不使用变量,正在工作。如果它使用变量,即使我传递给函数也不起作用。
def exception(a, nr_repeat=5,*args):
if nr_repeat != 0:
try:
exec(a)
nr_repeat = 0
except ExceptionEx:
exception(a, nr_repeat-1)
功能:
exception("print('blue)") - working
exception("data.split('/')") - not working
ExceptionEx只是不同异常的占位符
答案 0 :(得分:4)
您是否尝试过传入lambda函数?
exception(lambda: data.split('/'))
和你的功能内部:
def exception(a, nr_repeat=5):
if nr_repeat != 0:
try:
a()
nr_repeat = 0
except ExceptionType:
exception(a, nr_repeat-1)
在你调用lambda之前不会对它进行评估。