2012-11-30 220 views
2

我有蟒蛇一類,具有以下屬性:Python的鴻溝零錯誤

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

這當然引發了零誤差:

ZeroDivisionError: integer division or modulo by zero

的想法是,我將增加以後的number1和number2,但會自動更新自動更新?如果它是自動更新的,那麼我該如何解決零誤差問題?謝謝。

+1

不,不會更新 –

回答

12

不,self.divided是一個簡單的屬性,不會自動更新。對於動態屬性,使用property代替:

class Foo(object): 
    number1 = 0 
    number2 = 0 

    @property 
    def divided(self): 
     return self.number1/self.number2 
+1

您也可以使用較短的版本'divided = property(lambda obj:obj .nu​​mber1/obj.number2)' – Fabian

+4

@Fabian:然後我也必須解釋lambda。讓我們保持簡單。 :-) –

+1

現在你可以爭辯說你也必須解釋裝飾器了:-) – Fabian

8

自動更新ZeroDivisionError迴避:

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

你可以在單一以下爲我證明:

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

這確保如果您的值爲0,則不會收到錯誤。 但是可以肯定的是,只有在使用整數值或大於1的值時才使用它。