Skip to main content
 首页 » 编程设计

python lambda if/else 条件失败 : 'int' and 'function' conflicts

2025年05月04日21exmyth

我正在尝试使用内联的 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... 

完整追溯

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 

请您参考如下方法:

您不需要 lambda。直接设置持续时间即可。每次循环迭代都会重新计算该值。

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