2016-12-14 48 views
0
def do_timelapse(self, cmd): 
    self.final_fps = input("What will your final edit be at(FPS)?\n") 
    self.frame_interval = input("What is your Camera's Frame interval(Sec)") 
    self.original_frame_fps = 1/self.frame_interval 
    self.small_original = self.original_frame_fps/100 
    self.percentage = self.final_fps/self.small_original 
    print self.percentage 

我如何解决这个错误:ZeroDivisionError Python的

self.percentage = self.final_fps/self.small_original 
ZeroDivisionError: integer division or modulo by zero ? 
+1

'自我。original_frame_fps/100':整数除法python 2. =>'self.original_frame_fps/100.0' –

回答

3
self.frame_interval = input("What is your Camera's Frame interval(Sec)") 

它返回一个整数,意味着你使用python 2.所以下一行

self.original_frame_fps = 1/self.frame_interval 

大概问题0如果self.frame_interval> 1

self.small_original = self.original_frame_fps/100 

所以self.small_original为零

self.percentage = self.final_fps/self.small_original 

所以它崩溃。

修正:工作漂浮

self.original_frame_fps = 1.0/self.frame_interval 

self.small_original = self.original_frame_fps/100.0 

(当然检查self.frame_interval0要么)

替代方案:

  1. 使用Python 3,只有一个小的修复(现在仍然在检查零):

    self.final_fps = INT(输入( “?将你的最终剪辑是在什么(FPS)\ n”)) self.frame_interval = INT(输入( “什么是你的相机的画面间隔(秒)”))

因为input现在返回的字符串(如raw_input确实在Python 3)

  • 在python 2中使用python 3 division:add这在你的文件的开头:

    from __future__ import division

  • 1

    我最好的猜测是你在使用Python 2.7返回上两个int师一个整数值。例如:

    >>> 5/100 
    0 
    

    这是self.small_original值越来越设置为0。为了解决这个问题的原因,你需要类型转换的任何分子或分母来float为:

    >>> float(5)/100 
    0.05 # returns float value 
    

    因此,你需要用更新的订单在你的代码:

    self.original_frame_fps = 1.0/self.frame_interval 
    #    float here^
    

    self.small_original = self.original_frame_fps/100.0 
    #         float value^
    
    +0

    首先出现'self.original_frame_fps = 1.0/self.frame_interval' –

    +0

    @ Jean-FrançoisFabre:谢谢指点。我已经改变了它:) –