我是编程新手,我不确定如何解决这个问题。
我想在整数超过最大整数时引发错误......所以我导入了sys
......最大整数是2147483647
,最小值是-2147483648
。我正在使用斐波那契数列创建一个列表,因此我尝试编写一些代码:
if i > 2147483647:
print "Overflow Error"
...同样适用于最小值。但是,它什么也没做,我仍然可以列出过去的数字2147483647
。
我究竟做错了什么?
我是编程新手,我不确定如何解决这个问题。
我想在整数超过最大整数时引发错误......所以我导入了sys
......最大整数是2147483647
,最小值是-2147483648
。我正在使用斐波那契数列创建一个列表,因此我尝试编写一些代码:
if i > 2147483647:
print "Overflow Error"
...同样适用于最小值。但是,它什么也没做,我仍然可以列出过去的数字2147483647
。
我究竟做错了什么?
Python 长整数没有上限,它们仅限于您可以放入 RAM 中的内容:
>>> import sys
>>> sys.maxint * 2
18446744073709551614L
该sys.maxint
值告诉您 python 将在哪里开始使用该long
类型而不是int
表示整数;过渡是自动的。
在计算斐波那契数列时,您不太可能达到该内存限制。
正如 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')