Python:将执行语句作为函数参数传递

标签 python

retVal = None
retries = 5
success = False
while retries > 0 and success == False:
    try:
        retVal = graph.put_event(**args)
        success = True
    except:
        retries = retries-1
        logging.info('Facebook put_event timed out.  Retrying.')
return success, retVal

在上面的代码中,我如何将整个事情包装成一个函数,并使任何命令(在这个例子中,'graph.put_event(**args)')都可以作为参数传递给在函数内执行?

最佳答案

直接回答您的问题:

def foo(func, *args, **kwargs):
    retVal = None
    retries = 5
    success = False
    while retries > 0 and success == False:
        try:
            retVal = func(*args, **kwargs)
            success = True
        except:
            retries = retries-1
            logging.info('Facebook put_event timed out.  Retrying.')
    return success, retVal

然后可以这样调用:

s, r = foo(graph.put_event, arg1, arg2, kwarg1="hello", kwarg2="world")

顺便说一句,鉴于上述任务,我会按照以下方式编写:

class CustomException(Exception): pass

# Note: untested code...
def foo(func, *args, **kwargs):
    retries = 5
    while retries > 0:
        try:
            return func(*args, **kwargs)
        except:
            retries -= 1
            # maybe sleep a short while
    raise CustomException

# to be used as such
try:
    rv = foo(graph.put_event, arg1, arg2, kwarg1="hello", kwarg2="world")
except CustomException:
    # handle failure

关于Python:将执行语句作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6371041/

相关文章:

python - 使用 Bokeh 绘图时,如何自动循环显示调色板?

python - 成对距离 python(一个基向量对许多其他基向量)

python - 在 python 脚本中使用 easy_install?

python - 如何截断小数类型并保留为小数类型而不四舍五入?

python - 将Numpy图像数组转换为1px高版本

python - 为什么本例中的 Python 多线程速度这么慢?

python - 将 sqlalchemy 查询结果转换为字典列表

python - 如何将整个 css 添加到 django 表单中?

python - 无法通过请求 : NoneType error 进行身份验证

python - CherryPy,从 matplotlib 或一般情况下加载图像