Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python lambda if/else条件失败:';int';和';功能';冲突_Python - Fatal编程技术网

python lambda if/else条件失败:';int';和';功能';冲突

python lambda if/else条件失败:';int';和';功能';冲突,python,Python,我试图使用内嵌lambda函数来执行一些if/else条件,其中我得到了“”不支持的+:“int”和“function”的操作数类型“错误。在这里,我试图将_duration设置为1.5,除非它的第一次和最后一次数组迭代。你能看一下并提供一些提示吗。展望未来 for idx, string in enumerate(lines): duration = 10 clips = [] clips.append(ImageClip(os.path.join(folder,

我试图使用内嵌lambda函数来执行一些if/else条件,其中我得到了“
”不支持的+:“int”和“function”的操作数类型“
错误。在这里,我试图将_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
回溯(最近一次呼叫最后一次):
文件“C:\vhosts\phpsols\pymovie\FORMAT-4\three.py”,第90行,格式为
.set_duration(lambda idx:3 if(idx==0和line[len(line)-1]),else 1.5)
文件“”,第2行,在设置的持续时间内
文件“C:\anaconda32\lib\site packages\moviepy-0.2.2.11-py2.7.egg\moviepy\decorators.py”,第29行,应用到掩码
newclip=f(clip,*a,**k)
文件“”,第2行,在设置的持续时间内
文件“C:\anaconda32\lib\site packages\moviepy-0.2.2.11-py2.7.egg\moviepy\decorators.py”,第41行,应用到音频
newclip=f(clip,*a,**k)
文件“”,第2行,在设置的持续时间内
包装中的文件“C:\anaconda32\lib\site packages\moviepy-0.2.2.11-py2.7.egg\moviepy\decorators.py”,第89行
返回f(*新功率,**新功率)
文件“”,第2行,在设置的持续时间内
outplace第14行的文件“C:\anaconda32\lib\site packages\moviepy-0.2.2.11-py2.7.egg\moviepy\decorators.py”
f(新剪辑,*a,**k)
文件“C:\anaconda32\lib\site packages\moviepy-0.2.2.11-py2.7.egg\moviepy\Clip.py”,第288行,在集合中
self.end=None如果(t为None)其他(self.start+t)
TypeError:不支持+:“int”和“function”的操作数类型
进程终止,退出代码为1

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

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

你不需要羔羊。直接设置持续时间即可。该值已在每次循环迭代中重新计算

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


在这种情况下,你根本不需要lambda。只需在set_duration()调用中放入“3if(idx…”表达式。

在这种情况下,您根本不需要lambda。只需在set_duration()调用中放入“3if(idx…”表达式。

编辑:抱歉,只是瞎猜。尝试一下它对我有效……您确定错误指向代码的这一部分吗?您没有“+”这里…错误基本上是说您试图将INT和FUNCTION相加:)作为“+:'INT'和'FUNCTION'不支持的操作数类型”不指“and”在你的lambda里面。@PeterMajko,嗨,不是这样far@PeterMajko,它的moviepy模块,所以ImageClip是标准的class@PeterMajko,添加了完整的回溯…首先了解lambda。lambda创建函数。与基于某些函数的其他函数一起使用非常有用:)例如map或filter。这里它没有用,因为您希望函数的结果立即作为您的输入。set_duration()编辑:对不起,只是瞎猜。尝试一下,对我来说很有用。。。您确定错误指向代码的这一部分吗?您在这里没有“+”。。。错误基本上是说您试图将INT和FUNCTION一起添加:)作为“+:'INT'和'FUNCTION'不支持的操作数类型”,而不是指”和“在lambda内部”。@PeterMajko,您好,不是这样far@PeterMajko,它的moviepy模块,所以ImageClip是标准的class@PeterMajko,添加了完整的回溯…首先了解lambda。lambda创建函数。与基于某些函数的其他函数一起使用非常有用:)例如映射或过滤器。在这里它没有用处,因为您希望立即将函数的结果作为.set_duration()的输入。尽管如此,我仍然希望看到错误背后的原因,即使这样做可以解决用户的问题:)编辑的问题(带有回溯)现在显示问题根本不在这里…@PeterMajko:
.set_duration()
尝试计算
self.start+t
(参见堆栈跟踪),其中
t
是用户的输入,它错误地是lambda(函数),而
self.start
是一个整数。因此,+:“int”和“function”的
不支持的操作数类型出现错误。是的,我现在明白了。使用lambda将是:
.set_duration((lambda x:3,如果(x==0和行[len(行)-1]),否则为1.5)(idx))
相当夸张:D@PeterMajko,yaap,但是在这里学习如何使用lambda非常好:)尽管如此,我仍然希望看到错误背后的原因,即使这样的事情解决了用户的问题:)编辑的问题(带回溯)现在显示问题根本不在这里…@PeterMajko:
。set_duration()
尝试计算
self.start+t
(参见堆栈跟踪),其中
t
是用户的输入,它错误地是lambda(函数),
self.start
是一个整数。因此,+:“int”和“function”的
不支持的操作数类型出现错误。是的,我现在明白了。使用lambda将是:
.set_duration((lambda x:3,如果(x==0和行[len(行)-1]),否则为1.5)(idx))
相当夸张:D@PeterMajko,是的,但是在这里学习如何使用lambda非常好:)