在Python中,如何覆盖算术运算符“/”产生:1 / 0 => math.inf?

In Python, how to override the arithmetic operator "/" to produce: 1 / 0 => math.inf?

在 Python 中,当我 运行 操作:1 / 0 时,其默认行为是生成异常:“ZeroDivisionError:浮点数除以零”

如何重载此默认行为以便我可以获得: 1 / 0 => math.inf

您可能必须编写自己的库来允许这种情况发生,做一些简单的事情可能并不难,当您收到该错误时会看到该错误并将该数字分配给 'infinity'

您需要定义自己的 class 并在其中至少定义方法 __truediv__ (/) 和 __floordiv__ (//)。例如,如果您只定义这两个 + 将不起作用(请参阅下面的错误)。

import math


class MyFloat:
    def __init__(self, val):
        self.val = val

    def __truediv__(self, other):
        if other.val == 0:
            return math.inf
        return self.val / other.val

    def __floordiv__(self, other):
        if other.val == 0:
            return math.inf
        return self.val // other.val


one = MyFloat(1)
zero = MyFloat(0)

print(one / zero)
print(one // zero)
// will throw an error (PyCharm will also pick up on this)
print(one + zero)

预期输出

Traceback (most recent call last):
  File "/home/tom/Dev/Studium/test/main.py", line 24, in <module>
    print(one + zero)
TypeError: unsupported operand type(s) for +: 'MyFloat' and 'MyFloat'
inf
inf

有关 特殊 Python 函数的列表,请参阅 this website