循环中忽略一些元组

时间:2018-07-10 15:26:31

标签: python

我正在以元组形式生成一些动画帧,其中可能包含(0,0)值,而在生成带有moviepy的帧时,我想将其省略。 xy在循环中包含以下内容。第一次和第二次迭代包含(0,0),其余则包含浮点数。我想忽略那些拥有(0,0)的迭代。可以用moviepy的make_frame(t)def完成吗?我需要一些建议。

(0, 0)
(0, 0)
(82.5, 82.5)
(82.5, 82.5)
(108.28125, 108.28125)
(108.28125, 108.28125)

我遇到以下错误:

Traceback (most recent call last):
  File "C:\vhosts\VIDEO_TWO_CLONE\vapory-examples-master\scene9.py", line 151, in <module>
    clip = VideoClip(make_frame, duration=5)
  File "C:\Anaconda64\lib\site-packages\moviepy\video\VideoClip.py", line 103, in __init__
    self.size = self.get_frame(0).shape[:2][::-1]
AttributeError: 'NoneType' object has no attribute 'shape'
Process terminated with an exit code of 1

这是make_frame(t)的定义:

def make_frame(t):

    # PREPARE A DRAWING SURFACE
    surface = gizeh.Surface(width=W, height=H, bg_color=(0,0,0)) # in pixels

    p = PointAnimation((0,0), (110,110), tween=['easeOutElastic', 1, 0.2])

    xy = p.make_frame(t, 0.2, 1, 4, 5)

    if str(xy) == '(0,0)':
        circle = gizeh.circle(r=30, xy=xy, fill=(1,1,0))
        circle.draw(surface) # draw the circle on the surface
        return surface.get_npimage()


clip = VideoClip(make_frame, duration=5)
clip.write_gif("circle.gif", fps=25, fuzz=10) 

1 个答案:

答案 0 :(得分:1)

在您的代码中,您有if str(xy) == '(0,0)',而实际上应该为if str(xy) == '(0, 0)'(请注意元组内部的空间;这是在Python中将元组转换为字符串的方式)。但是,一种更好的方法是if xy == (0,0)(这里的空间无关紧要,因为没有转换为字符串)。