如何创建堆栈溢出/下溢的错误信息

1 投票
2 回答
1189 浏览
提问于 2025-04-17 15:40

我刚开始学习编程,不太确定该怎么解决这个问题。

我想在一个整数超过最大值时抛出错误……所以我导入了 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').

我不建议你抛出一个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')
2

Python中的长整型数字没有上限,它们只受限于你电脑的内存大小:

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

sys.maxint这个值告诉你,Python会在什么情况下开始使用long类型来表示整数,而不是int类型;这个转换是自动进行的。

在计算斐波那契数列时,你不太可能会遇到内存限制的问题。

撰写回答