在python中模拟“wrap”的最佳方法

在python中模拟“wrap”的最佳方法,python,Python,我正在寻找最好的方法,如何在Python2.6中编写wrap函数。此函数将命令函数调用作为参数,并在调用不顺利时终止脚本,返回错误值。我看到的主要问题是,当嵌套调用失败时,wrap必须检测此事件并终止脚本。 比如说 def foo1(x): y = foo2(x) return y def foo2(y): y = 2**y return y 然后我使用像这样的包装: wrap(foo1(2)) 请考虑这个例子极为简化。 问题是,即使在foo2中,wrap也

我正在寻找最好的方法,如何在Python2.6中编写wrap函数。此函数将命令函数调用作为参数,并在调用不顺利时终止脚本,返回错误值。我看到的主要问题是,当嵌套调用失败时,wrap必须检测此事件并终止脚本。 比如说

def foo1(x):
    y = foo2(x)
    return y

def foo2(y):
    y = 2**y
    return y
然后我使用像这样的包装:

wrap(foo1(2))

请考虑这个例子极为简化。


问题是,即使在foo2中,wrap也必须检测何时发生错误

除非您开始使用Python的字节码,否则没有明确的方法来完成您的要求。即使这样,也不清楚错误检测意味着什么,因为您可能想从代码中调用其他函数,比如计算数字的sqrt:

>>> def foo3(y):
...   y = sqrt(5)
...   return y
... 
sqrt上的错误意味着什么

测试代码最常用的两种方法是:

我只关心一个值。如果要测试多个功能,请分别测试每个功能:

wrap(foo1(2))
wrap(foo2(2))
wrap(foo3(2))
2使用异常。每个函数负责发出错误信号,并从wrap中检测该错误:

def wrap(f, args, kwargs={}):
  try:
    f(*args, **kwargs)
  except:
    print("Error on f")

def main():
  wrap(foo1, (2, ))
  wrap(foo2, (2, ))
  wrap(foo3, (2, ))

你不能简单地使用try…除了捕获wrap函数中的错误吗?这个问题对我来说不是很清楚。异常将传播,您可以在任何级别捕获它们。我认为我必须使用try,但我可能希望将可执行应用程序包装为子流程。将尝试自己处理此错误吗?显示有问题的代码。事实上,你有什么问题吗?