2014-09-11 66 views
-2

如果(int4/int3) == (int3/int2) == (int2/int1),我會做點什麼。如何處理除錯誤,如果我想參加的int4==int3==int2==int1==0更有效的方法來處理零除?

try: 
    (int4/int3) == (int3/int2) == (int2/int1) 
except ZeroDivisionError: 
     PerformA() 
else: 
     PerformA() 
+0

怎麼樣「如果INT2 = 0(INT1!/int2)==(int3/int2):「... – Pascal 2014-09-11 13:35:15

+6

與您的問題無關,但由於這是Python,因此縮進很重要。修復它。 – Bucket 2014-09-11 13:36:28

+0

@PascalBeyeler。編輯我的問題 – 2014-09-11 13:36:45

回答

2

結果如果我正確理解你的問題,你只需要知道如何最好地處理這種比較時,一些比較可能是無效的。我通常看到(和使用)的模式是檢查邊緣條件(如果它們可能很常見)並處理它們。如果不存在邊緣條件,則可以轉到標準過程。

在這個特定的例子中,你定義了一個邊界情況:當你的一個分母是零時。因此,請檢查int1,int2int3是否爲零,如果是,請執行相應的操作。如果它們都不是,您可以繼續進行比例比較。

if not (int1 and int2 and int3): 
    do_something_with_zero_values() 
elif (int4/int3) == (int3/int2) == (int2/int1): # This is now a safe operation 
    do_something() 

當然,你也可以使用異常處理來處理您的邊緣情況。按照慣例,你通常只希望在「例外」情況下使用例外,所以如果零對於這些變量來說確實是一個合理的價值,那麼我會建議不要將它概念化爲例外。有關該討論的更多信息,請參見this question

+0

我更喜歡使用'all'這樣的東西:'if not all all([int1,int2,int3])',尤其是如果它是一個長列表或它已經是一個列表。 – mtik00 2014-09-11 14:02:14

+0

@ mtik00當然,但是這些變量(據我所知)已經不在列表中,並且只有三個變量。當我正在做一些比直接的真實性更復雜的事情時,我通常會保存「全部」(或「任何」);例如(如果有的話)(big_list_of_floats中的n的math.isnan(n)):' – 2014-09-11 14:06:44

0

取決於你真正想實現(0語義不明確)是什麼,這裏有兩種選擇:

if 0 in (int1, int2, int3, int4) or int1/int2 == int2/int3 == int3/int4: 
    foo() 

if not any(int1, int2, int3, int4) or int1/int2 == int2/int3 == int3/int4: 
    foo() 
相關問題