2

複数の-vがアプリに渡された場合を処理するために、オプトパースへのコールバックとしてラムダを割り当てようとすると問題が発生します。これにより、-vが表示されるたびにグローバル変数DEBUGがインクリメントされます。

# 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

アイデアや代替(クリーン)な提案はありますか?

4

2 に答える 2

2

ラムダは式である必要がありますが、そのような割り当てはステートメントです。あなたはおそらくこのようにそれをしなければならないでしょう:

# 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)")
于 2011-06-26T20:10:53.157 に答える
1

ラムダ内で割り当てを行うことはできないため、通常の関数を定義する必要があります(体操を行わない限り)。

ただし、a)にアップグレードしargparse、b)argparse アクションモデルを使用することをお勧めします。この'append'アクションは、特に役立つようです。(というより、この場合、'append-const'アクション。)

于 2011-06-26T20:10:03.280 に答える