python lambda如果/ else条件失败:'int'和'function'冲突

Ana*_*ose 1 python

我正在尝试使用in-line,lambda函数来执行一些if/else条件,我在哪里得到"unsupported operand type(s) for +: 'int' and 'function'"错误.在这里,我试图将set_duration设置为1.5,除非它的第一个和最后一个数组迭代.你能看看并提供任何提示.期待.

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...
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 5

你不需要lambda.只需直接设置持续时间.每次循环迭代都会重新计算该值.

             .set_duration(3.0 if idx == 0 and lines[-1] else 1.5)
Run Code Online (Sandbox Code Playgroud)