我遇到问题是尝试将lambda作为回调分配给optparse以处理将多个-v传递给app的情况,每次看到-v时都应增加全局变量DEBUG。 / p>
# globals
DEBUG = 0
(...)
def main():
[...]
parser.add_option("-v", action="callback",
callback=lambda a,b,c,d: DEBUG += 1
help="Verbose (-vvv for added verboseness)")
执行此操作时,结果为:
callback=lambda a,b,c,d: DEBUG += 1
^
SyntaxError: invalid syntax
任何想法或替代(干净)的建议?
答案 0 :(得分:2)
lambda必须是一个表达式,而像这样的赋值是一个语句。您可能必须这样做:
# globals
DEBUG = 0
(...)
def main():
[...]
def increment(*args):
global DEBUG
DEBUG += 1
parser.add_option("-v", action="callback",
callback=increment,
help="Verbose (-vvv for added verboseness)")
答案 1 :(得分:1)
你将不得不定义一个正常的函数,因为在lambda中不能进行赋值(除非你做一些体操)。
但是,我建议a)使用argparse
action model升级到argparse
和b)。 'append'
动作似乎对您特别有用。 (或者在这种情况下,'append-const'
动作。)