如何更有效地处理零除问题?

2024-06-16 11:06:47 发布

您现在位置:Python中文网/ 问答频道 /正文

如果(int4/int3) == (int3/int2) == (int2/int1),我会做点什么。如果我想同时接收int4==int3==int2==int1==0的结果,我如何处理除法错误

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

Tags: 错误elsetry我会exceptzerodivisionerrorint1int2
2条回答

根据您实际想要实现的目标(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()

如果我对你的问题理解正确,你只需要知道如何在某些比较可能无效的情况下最好地处理这个比较。我通常看到(和使用)的模式是检查边缘条件(如果它们很常见的话)并处理它们。如果不存在边缘条件,则可以转到标准流程。你知道吗

在这个特殊的例子中,定义了一个边沿情况:当一个分母为零时。因此,请检查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以了解有关该讨论的更多信息。你知道吗

相关问题 更多 >