0

我是编程新手,我不确定如何解决这个问题。

我想在整数超过最大整数时引发错误......所以我导入了sys......最大整数是2147483647,最小值是-2147483648。我正在使用斐波那契数列创建一个列表,因此我尝试编写一些代码:

if i > 2147483647:
    print "Overflow Error"

...同样适用于最小值。但是,它什么也没做,我仍然可以列出过去的数字2147483647

我究竟做错了什么?

4

2 回答 2

2

Python 长整数没有上限,它们仅限于您可以放入 RAM 中的内容:

>>> import sys
>>> sys.maxint * 2
18446744073709551614L

sys.maxint值告诉您 python 将在哪里开始使用该long类型而不是int表示整数;过渡是自动的。

在计算斐波那契数列时,您不太可能达到该内存限制。

于 2013-02-12T22:53:21.687 回答
0

正如 Martijn 所说,您不会遇到任何错误(除非您正在处理非常大的数字或非常大的列表)。但是,Python 不允许您实际使用所有内存。如果使用太多内存(MemoryError),它将引发错误。

但是,如果您想对输入设置限制:

from sys import maxint
if i > maxint: raise ValueError('i cannot exceed 2147483647')
elif i < -1 * maxint: raise ValueError('i must be greater than -2147483647').

我不建议你提高OverflowError,ValueError更合适。

我不清楚这个问题,所以如果你试图检查列表大小是否大于maxint

from sys import maxint
if len(i) > maxint: raise ValueError('i cannot exceed 2147483647 elements')
# you don't need a minimum value, as the length cannot be negative

如果您尝试检查列表的最大值是否大于maxint

from sys import maxint
if max(i) > maxint: raise ValueError('i cannot exceed 2147483647')
于 2013-02-13T00:12:35.660 回答