回调函数不可调用
我在Python的文档里看到,可以从命令行调用一个函数,所以我用了optparse
模块来从一个函数返回一大段文本,但我的代码就是不工作!我觉得我已经做对了所有的事情。
def HelpDoc():
return """ SOME
HUGE
TEXT """
parser = OptionParser(usage="%prog ConfigFile")
parser.add_option("-g", "--guide", action = "callback", callback=HelpDoc(), help = "Show help documentation")
(options,args) = parser.parse_args()
错误追踪信息
parser.add_option("-g", "--guide", action = "callback", callback=HelpDoc(), help = "Show help documentation")
File "/Python-2.7.2/lib/python2.7/optparse.py", line 1012, in add_option
option = self.option_class(*args, **kwargs)
File "/Python-2.7.2/lib/python2.7/optparse.py", line 577, in __init__
checker(self)
File "/Python-2.7.2/lib/python2.7/optparse.py", line 712, in _check_callback
"callback not callable: %r" % self.callback, self)
1 个回答
2
HelpDoc()
是一个字符串,而不是一个可以调用的函数,所以应该用 callback=HelpDoc
来代替,也就是说:
parser.add_option("-g", "--guide", action = "callback", callback=HelpDoc, help = "Show help documentation")
这里的区别可以通过以下方式看到:
>>> type(HelpDoc())
str
>>> type(HelpDoc)
function
所以,这就是为什么会出现“回调对象不可调用”的问题。字符串显然不能像函数那样被调用。
不过,对于选项回调还有一些其他要求,所以在上面的修正后,你可能会收到另一个错误(参数太多)。想了解更多信息和示例,可以查看:https://docs.python.org/2/library/optparse.html#optparse-option-callbacks
所以,这事情比想象中要复杂一些。至少函数的签名(接受的参数)必须正确。
(正如 Shadow9043 在评论中提到的,optparse
已经不再推荐使用,建议用 argparse
代替。)