Python 出乎意料的 "except" 加薪
Unexpectable "except" raise in Python
请帮助 python 脚本。 Python 2.7。
我试图制作一些功能来通过错误检查重复操作。
所以在我认为下面调用的函数中(lib_func),没有错误。
但是 repeater() 中的 "except" 以任何方式提升。
如果我不在 lib_func() 中使用 "x" - 它可以正常工作,但我仍然需要在 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
你应该传递函数指针而不是像你在这里那样调用它
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!
你的缩进有误,转发器应该这样调用:
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)
。
或者,您可以使用部分:
from functools import partial
lf = partial(lib_func, 10)
repeater(lf)
你遇到了变量与函数的问题。
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)
请帮助 python 脚本。 Python 2.7。 我试图制作一些功能来通过错误检查重复操作。 所以在我认为下面调用的函数中(lib_func),没有错误。 但是 repeater() 中的 "except" 以任何方式提升。
如果我不在 lib_func() 中使用 "x" - 它可以正常工作,但我仍然需要在 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
你应该传递函数指针而不是像你在这里那样调用它
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!
你的缩进有误,转发器应该这样调用:
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)
。
或者,您可以使用部分:
from functools import partial
lf = partial(lib_func, 10)
repeater(lf)
你遇到了变量与函数的问题。
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)