更有效的方法来处理除零?

时间:2014-09-11 13:32:12

标签: python division

如果(int4/int3) == (int3/int2) == (int2/int1),我会做点什么。如果我想接受int4==int3==int2==int1==0的结果

,如何处理除法错误
 try:
     (int4/int3) == (int3/int2) == (int2/int1)
 except ZeroDivisionError:
      PerformA()
 else:
      PerformA()

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你只需要知道如何在某些比较无效时更好地处理这种比较。我通常看到(和使用)的模式是检查边缘条件(如果它们可能很常见)并处理它们。如果不存在边缘条件,则可以继续执行标准过程。

在此特定实例中,您定义了一个边缘大小写:当您的一个分母为零时。因此,请检查int1int2int3中的任何一项是否为零,并执行适当的操作(如果是)。如果没有,您可以继续进行比率比较。

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

答案 1 :(得分: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()