如何创建堆栈溢出/下溢的错误信息
我刚开始学习编程,不太确定该怎么解决这个问题。
我想在一个整数超过最大值时抛出错误……所以我导入了 sys
模块……最大整数是 2147483647
,最小整数是 -2147483648
。我正在用斐波那契数列创建一个列表,所以我试着写了一些代码,想要实现:
if i > 2147483647:
print "Overflow Error"
……同样的逻辑也适用于最小值。但是,这段代码没有任何效果,我仍然可以列出超过 2147483647
的数字。
我哪里做错了呢?
2 个回答
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')
2
Python中的长整型数字没有上限,它们只受限于你电脑的内存大小:
>>> import sys
>>> sys.maxint * 2
18446744073709551614L
sys.maxint
这个值告诉你,Python会在什么情况下开始使用long
类型来表示整数,而不是int
类型;这个转换是自动进行的。
在计算斐波那契数列时,你不太可能会遇到内存限制的问题。