2016-11-21 4 views
1

私は"unsupported operand type(s) for +: 'int' and 'function'"エラーを受け取っているif/else条件を実行するためにインラインlambda関数を使用しようとしています。ここでは、最初と最後の配列の繰り返しがない限り、set_durationを1.5に設定しようとしています。見て、ヒントを提供してください。楽しみにしている。python lambda if/else条件に失敗しました: 'int'と 'function'の衝突

for idx, string in enumerate(lines): 


    duration = 10 
    clips = [] 

    clips.append(ImageClip(os.path.join(folder,"gradient.png")) 
       .set_duration(lambda idx: 3 if (idx == 0 and lines[len(lines) - 1]) else 1.5) 
       ) 

    clips.append(ImageClip(os.path.join(folder,"image-{0}.png")) 
       .resize(width=800) 
       .set_duration(lambda idx: 3 if (idx == 0 and lines[len(lines) - 1]) else 1.5) 
       .margin(right=60, opacity=0) 
       .set_pos(("right","center")) 
       ) 

    clips.append(ImageClip(os.path.join(folder, "big-append.png")) 
       .resize(width=900) 
       .margin(left=60,opacity=0) 
       .set_duration(lambda idx: 3 if (idx == 0 and lines[len(lines) - 1]) else 1.5) 
       .set_pos(("left", "center")) 
       ) 



// rest of the code... 

FullTraceback

Traceback (most recent call last): 
    File "C:\vhosts\phpsols\pymovie\FORMAT-4\three.py", line 90, in <module> 
    .set_duration(lambda idx: 3 if (idx == 0 and lines[len(lines) - 1]) else 1.5) 
    File "<decorator-gen-29>", line 2, in set_duration 
    File "C:\anaconda32\lib\site-packages\moviepy-0.2.2.11-py2.7.egg\moviepy\decorators.py", line 29, in apply_to_mask 
    newclip = f(clip, *a, **k) 
    File "<decorator-gen-28>", line 2, in set_duration 
    File "C:\anaconda32\lib\site-packages\moviepy-0.2.2.11-py2.7.egg\moviepy\decorators.py", line 41, in apply_to_audio 
    newclip = f(clip, *a, **k) 
    File "<decorator-gen-27>", line 2, in set_duration 
    File "C:\anaconda32\lib\site-packages\moviepy-0.2.2.11-py2.7.egg\moviepy\decorators.py", line 89, in wrapper 
    return f(*new_a, **new_kw) 
    File "<decorator-gen-26>", line 2, in set_duration 
    File "C:\anaconda32\lib\site-packages\moviepy-0.2.2.11-py2.7.egg\moviepy\decorators.py", line 14, in outplace 
    f(newclip, *a, **k) 
    File "C:\anaconda32\lib\site-packages\moviepy-0.2.2.11-py2.7.egg\moviepy\Clip.py", line 288, in set_duration 
    self.end = None if (t is None) else (self.start + t) 
TypeError: unsupported operand type(s) for +: 'int' and 'function' 
Process terminated with an exit code of 1 
+0

EDIT:申し訳ありませんが、盲目的な推測です。あなたはここには "+"はありません...エラーは基本的にあなたがINTとFUNCTIONを一緒に追加しようとしていると言っています:) "+: 'int'と 'function '"はあなたのラムダの中で"と "を指しません。 –

+0

@PeterMajko、これまでのところこんにちは –

+0

@PeterMajko、moviepyモジュールですので、ImageClipに標準クラスがあります –

答えて

5

あなたは、ラムダは必要ありません。期間を直接設定するだけです。この値は、ループの繰り返しごとに既に再計算されています。

   .set_duration(3.0 if idx == 0 and lines[-1] else 1.5) 
+0

私はまだ、たとえそのようなことがユーザーの問題を解決したとしても、エラーの背後にある理由を見たいと思っています:) –

+0

編集した質問(トレースバック付き)は、問題がここに全くないことを示しています... – SiHa

+1

@PeterMajko : '.set_duration()'は 'self.start + t'(スタックトレースを参照)を計算しようとします。' t'はユーザの入力であり、間違ってラムダ(関数)であり、 'self.start'は整数。したがって、サポートされていないオペランドの型は+: 'int'と 'function''のエラーです。 – kennytm

0

この場合、ラムダはまったく必要ありません。ちょうど "3 if(idx ...")式をset_duration()呼び出しに入れてください。

関連する問題