请帮助python脚本。 Python 2.7。 我尝试使用错误检查重复操作的一些功能。 所以在我认为的函数中我调用下面(lib_func),没有错误。 但是"除了"在repeater()提升任何方式。
如果我不使用" x"在lib_func()中 - 它没有错误,但我仍然需要在lib_func()中放置参数。
抱歉英语不好,并提前感谢您的帮助。
def error_handler():
print ('error!!!!!!')
def lib_func(x):
print ('lib_func here! and x = ' + str(x))
def repeater(some_function):
for attempts in range(0, 2):
try:
some_function()
except:
if attempts == 1:
error_handler()
else:
continue
break
return some_function
repeater(lib_func(10))
输出:
lib_func here! and x = 10
error!!!!!!
Process finished with exit code 0
答案 0 :(得分:6)
您的缩进错误,应按如下方式调用转发器:
def repeater(some_function):
for attempts in range(0, 2):
try:
some_function()
except:
if attempts == 1:
error_handler()
else:
continue
return some_function()
repeater(lambda: lib_func(10)) # pass `lib_func(10)` using lambda
我不明白你想要达到的目标,但上面的代码在for循环中执行lib_func(10)
几次。
或者,您可以使用partial:
from functools import partial
lf = partial(lib_func, 10)
repeater(lf)
答案 1 :(得分:2)
你应该传递函数指针而不是像你在这里那样调用它
repeater(lib_func(10))
应该是
repeater(lib_func)
您可以修改它以将数字作为参数
repeater(lib_func, 10)
你的功能应该是
def repeater(some_function, some_value):
for attempts in range(0, 2):
try:
some_function(some_value)
except:
if attempts == 1:
error_handler()
else:
continue
#the break statement makes no sense
return #why would you return the function as it is not doing anything!
答案 2 :(得分:2)
你有变量与功能的问题。
期望使用函数作为参数调用 repeater
。因此,当您致电repeater(lib_func)
时,一切正常:some_function()
实际上会调用lib_func()
。
但是当你尝试调用repeater(lib_func(10))
时,python首先计算lib_func(10))
(在上面的代码中返回None
),然后调用repeater(None)
=>因为None
不可调用而给出异常!
如果您希望能够使用带有一个参数的函数调用转发器,则应将参数传递给repeater
。例如:
def repeater(some_function, arg = None):
for attempts in range(0, 2):
try:
cr = some_function() if arg is None else some_function(arg)
except:
if attempts == 1:
error_handler()
else:
continue
break
return cr
repeater(lib_func, 10)
或者如果你想接受可变数量的参数:
def repeater(some_function, *args):
for attempts in range(0, 2):
try:
cr = some_function(*args)
except:
if attempts == 1:
error_handler()
else:
continue
break
return cr
repeater(lib_func, 10)