回调函数不可调用

时间:2014-07-01 11:11:29

标签: python callback arguments

我在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 个答案:

答案 0 :(得分:1)

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