如果(int4/int3) == (int3/int2) == (int2/int1)
,我会做点什么。如果我想接受int4==int3==int2==int1==0
的结果
try:
(int4/int3) == (int3/int2) == (int2/int1)
except ZeroDivisionError:
PerformA()
else:
PerformA()
答案 0 :(得分:2)
如果我理解你的问题,你只需要知道如何在某些比较无效时更好地处理这种比较。我通常看到(和使用)的模式是检查边缘条件(如果它们可能很常见)并处理它们。如果不存在边缘条件,则可以继续执行标准过程。
在此特定实例中,您定义了一个边缘大小写:当您的一个分母为零时。因此,请检查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。
答案 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()