回调函数不可调用

1 投票
1 回答
2110 浏览
提问于 2025-04-18 11:43

我在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 代替。)

撰写回答