如何为堆栈上溢/下溢创建错误消息

时间:2013-02-12 22:46:40

标签: python

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

我想在整数超过最大整数时引发错误...所以我导入sys ...最大整数是2147483647,最小值是-2147483648。我正在使用Fibonacci序列创建一个列表,所以我试着写一些代码说:

if i > 2147483647:
    print "Overflow Error"

......同样也是最小值。但是,它没有做任何事情,我仍然可以列出2147483647之后的数字。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

Python长整数没有上限,它们仅限于你可以适应RAM:

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

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

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

答案 1 :(得分: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').

我不建议您提出OverflowErrorValueError更合适。

我不清楚这个问题,所以如果你试图检查列表大小是否大于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')