ZeroDivisionError Python

时间:2016-12-14 21:00:05

标签: python python-2.7

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

如何解决此错误:

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

2 个答案:

答案 0 :(得分:3)

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

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

self.original_frame_fps = 1/self.frame_interval
如果self.frame_interval>

可能会发出0 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_interval不是0

替代方案:

  1. 使用python 3,只需要一个小修复(并且仍然检查为零):

    self.final_fps = int(输入(“你的最终编辑是什么(FPS)?\ n”)) self.frame_interval = int(输入(“你的相机的帧间隔是多少(秒)”))

  2. 因为input现在返回字符串(例如raw_input在python 3中返回)

    1. 在python 2中使用python 3 division:在文件的开头添加:

      from __future__ import division

答案 1 :(得分:1)

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

>>> 5 / 100
0

这就是self.small_original的值被设置为0的原因。为了解决这个问题,你需要将float的任何分子或分母输入为:{/ p} >

>>> 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  ^