【问题标题】:Python Divide By Zero ErrorPython除以零错误
【发布时间】:2012-11-30 13:36:41
【问题描述】:

我在 python 中有一个类,具有以下属性:

    self.number1 = 0
    self.number2 = 0
    self.divided = self.number1/self.number2

这当然会抛出零错误:

ZeroDivisionError: 整数除以零或取模

这个想法是我稍后会增加 number1 和 number2,但是 self.divided 会自动更新吗?如果它是自动更新的,那么我该如何解决零错误?谢谢。

【问题讨论】:

    标签: python divide-by-zero


    【解决方案1】:

    不,self.divided 是一个简单的属性,不会自动更新。对于动态属性,请改用property

    class Foo(object):
        number1 = 0
        number2 = 0
    
        @property
        def divided(self):
            return self.number1 / self.number2
    

    【讨论】:

    • 你也可以使用更短的版本divided = property(lambda obj: obj.number1 / obj.number2)
    • @Fabian:然后我也必须解释一下 lambdas。让我们保持简单。 :-)
    • 现在你可以争辩说你也必须解释装饰器:-)
    • @Fabian:希望 OP 有兴趣阅读链接的文档!
    • @dedoco:当然可以。你想让它做什么?返回 42?
    【解决方案2】:

    自动更新,避免 ZeroDivisionError:

    @property
    def divided(self):
        try:
            #suppose that number2 is a float
            return self.number1/self.number2
        except ZeroDivisionError:
            return None
    

    【讨论】:

      【解决方案3】:

      你可以像我展示的那样单独执行以下操作:

      self.divided = self.number1/(self.number2  or not self.number2)
      

      这可确保如果您的值为 0,则不会出现错误。 但请确保,仅当您使用整数值或大于 1 的值时才使用它。

      【讨论】:

      • 非常hacky,但是很好!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      相关资源
      最近更新 更多