Python:创建一个尝试,除了通用功能

时间:2015-08-03 14:20:58

标签: python error-handling try-catch exec except

对于解析脚本,我需要在很多地方使用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只是不同异常的占位符

1 个答案:

答案 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之前不会对它进行评估。