在python中模拟'wrap'的最佳方法

时间:2014-12-08 08:21:25

标签: python

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

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

def foo2(y):
    y = 2**y
    return y

然后我使用这样的包裹:

wrap(foo1(2))

请将此示例视为极为简化。

事情是,即使在foo2中,wrap必须检测何时发生错误。

1 个答案:

答案 0 :(得分:0)

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

>>> def foo3(y):
...   y = sqrt(5)
...   return y
... 

sqrt上的错误是什么意思?

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

(1)只关心一个单一的价值。如果要测试多个功能,请分别测试每个功能:

wrap(foo1(2))
wrap(foo2(2))
wrap(foo3(2))

(2)使用例外。每个函数负责发出错误信号,并从包装中检测到错误:

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, ))