Python中的溢出错误检查

时间:2016-12-14 01:28:36

标签: python

import math
    if n < 0:
        raise ValueError("n must be >= 0")
    if math.floor(n) != n:
        raise ValueError("n must be exact integer")
    if n+1 == n:  # catch a value like 1e300
        raise OverflowError("n too large")
    result =1;
    factor =2;

    while factor <=n:
        result *= factor
        factor += 1

    return result

这是一个因子函数。我不明白“如果n + 1 == n:”,那么它表示“太大的整数”异常。为什么会这样?

2 个答案:

答案 0 :(得分:0)

Python对可以使用的数字的大小有限制。从概念上讲,如果Python的最大数量是10,000并输入数字10,001,Python会将该数字截断为10,000,即num == num+1

以下是更详细的更好答案:What is the maximum float in Python?

答案 1 :(得分:0)

首先,我不知道为什么这个程序存在,因为python对最高整数(https://docs.python.org/3/library/stdtypes.html#typesnumeric)没有限制。然而,正如之前的人所说的那样,这可以防止截断,例如&#34; 1e300&#34;其中10 ^ 300和10 ^ 300 + 1之间的差异相对较小,忽略了较小的值。