2011-06-26 10 views
2

グローバル変数DEBUGを増やす必要がある複数の-vが渡された場合の処理​​をoptparseのコールバックとしてラムダを割り当てようとすると問題が発生します。 a -vが見えるたびに。python optparseとlambdaをコールバックとして使用する問題

# 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

とにかく、あなたは、とにかくargparseの使用を検討する必要があります。 :) – Evpok

答えて

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)") 
+0

ありがとう、役に立つ! – CaseyJones

1

通常の関数を定義する必要があります。なぜなら、ラムダ内では割り当てができないからです(体操をしない限り)。

ただし、私は​​にアップグレードし、b)​​action modelを使用してアップグレードすることをお勧めします。 'append'アクションは、あなたにとって特に役立つようです。 (むしろこの場合、'append-const'アクション)

+0

ありがとう。小さな制約のためにArgParseに移動するのはあまりにも多くの作業になりそうです:-) – CaseyJones

+0

実際には、私は@senderleと一緒です - argparseは素晴らしいです:) –

+1

@CaseyJones - わかっています。しかし、ちょうどFYI、['optparse'は廃止予定です](http://docs.python.org/library/optparse.html)、とにかくいつかargparseに移動しなければならないかもしれません。 – senderle

関連する問題