我是编程新手,我不知道如何解决这个问题。
我想在整数超过最大整数时引发错误...所以我导入sys
...最大整数是2147483647
,最小值是-2147483648
。我正在使用Fibonacci序列创建一个列表,所以我试着写一些代码说:
if i > 2147483647:
print "Overflow Error"
......同样也是最小值。但是,它没有做任何事情,我仍然可以列出2147483647
之后的数字。
我做错了什么?
答案 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').
我不建议您提出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')