如果(int4/int3) == (int3/int2) == (int2/int1)
,我會做點什麼。如何處理除錯誤,如果我想參加的int4==int3==int2==int1==0
也更有效的方法來處理零除?
try:
(int4/int3) == (int3/int2) == (int2/int1)
except ZeroDivisionError:
PerformA()
else:
PerformA()
如果(int4/int3) == (int3/int2) == (int2/int1)
,我會做點什麼。如何處理除錯誤,如果我想參加的int4==int3==int2==int1==0
也更有效的方法來處理零除?
try:
(int4/int3) == (int3/int2) == (int2/int1)
except ZeroDivisionError:
PerformA()
else:
PerformA()
結果如果我正確理解你的問題,你只需要知道如何最好地處理這種比較時,一些比較可能是無效的。我通常看到(和使用)的模式是檢查邊緣條件(如果它們可能很常見)並處理它們。如果不存在邊緣條件,則可以轉到標準過程。
在這個特定的例子中,你定義了一個邊界情況:當你的一個分母是零時。因此,請檢查int1
,int2
或int3
是否爲零,如果是,請執行相應的操作。如果它們都不是,您可以繼續進行比例比較。
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。
我更喜歡使用'all'這樣的東西:'if not all all([int1,int2,int3])',尤其是如果它是一個長列表或它已經是一個列表。 – mtik00 2014-09-11 14:02:14
@ mtik00當然,但是這些變量(據我所知)已經不在列表中,並且只有三個變量。當我正在做一些比直接的真實性更復雜的事情時,我通常會保存「全部」(或「任何」);例如(如果有的話)(big_list_of_floats中的n的math.isnan(n)):' – 2014-09-11 14:06:44
取決於你真正想實現(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()
怎麼樣「如果INT2 = 0(INT1!/int2)==(int3/int2):「... – Pascal 2014-09-11 13:35:15
與您的問題無關,但由於這是Python,因此縮進很重要。修復它。 – Bucket 2014-09-11 13:36:28
@PascalBeyeler。編輯我的問題 – 2014-09-11 13:36:45