Python编译器 - 使用十进制进行零分割?

时间:2016-03-03 09:23:07

标签: python decimal division

我目前正在创建一个编译器,并且还希望实现零除。我注意到python中的十进制模块,并认为它可能很有用。下面的代码显示了我想要了解的内容。无论如何要分割表达式并检查负数和正数的0除法?提前谢谢。

if input negative int/0 = -infin
if pos int/0 = infin
if 0/0 = null

等。

1 个答案:

答案 0 :(得分:0)

python documentation表示默认行为是引发异常。

>>> import decimal
>>> D = decimal.Decimal
>>> a = D("12")
>>> b = D("0")
>>> a/b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/decimal.py", line 1350, in __truediv__
    return context._raise_error(DivisionByZero, 'x / 0', sign)
  File "/usr/lib/python3.4/decimal.py", line 4050, in _raise_error
    raise error(explanation)
decimal.DivisionByZero: x / 0
>>> 

但是,而不是提出异常:

  

如果没有捕获此信号,则返回Infinity或-Infinity   符号由计算输入决定。

从零除零开始,它没有数学定义,所以我不知道你可能想用它做什么。 Python会返回另一个异常:

>>> b/b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/decimal.py", line 1349, in __truediv__
    return context._raise_error(DivisionUndefined, '0 / 0')
  File "/usr/lib/python3.4/decimal.py", line 4050, in _raise_error
    raise error(explanation)
decimal.InvalidOperation: 0 / 0
>>>

如果信号没有被捕获,则返回NaN。 (可能无法知道操作是否为0除以零)。