2013-02-12 70 views
0

我是編程新手,我不確定如何解決這個問題。如何爲堆棧溢出/下溢創建錯誤消息

我想提出一個錯誤,當一個整數超過最大整數...所以我導入sys ...最大整數是2147483647和最小值是-2147483648。我創建使用斐波那契序列的列表,所以我試着寫一些代碼,說:

if i > 2147483647: 
    print "Overflow Error" 

...且同樣的最小值。但是,它沒有做任何事情,我仍然可以列出過去2147483647的數字。

我在做什麼錯?

+7

請發佈*完整* [示例](http://sscce.org)。這只是一個打印,這當然對程序的邏輯沒有影響。 – phihag 2013-02-12 22:49:00

+1

你是說它沒有崩潰_and_它不是打印你的消息?在這種情況下,只需調試你的代碼。 – keyser 2013-02-12 22:49:23

+2

實際上,Python整數可以和內存允許的一樣大。嘗試一下; 'import sys; sys.maxint * 2'。 – 2013-02-12 22:51:44

回答

2

Python的長整型有沒有上限,但僅限於你能適應在RAM中的內容:

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

sys.maxint值告訴您Python會開始使用long類型,而不是int代表整數;過渡是自動的。

在計算斐波納契數列時,您不太可能達到這個記憶極限。

+0

[Here's](http://stackoverflow.com/q/9860588/ 645270)關於主題的線程 – keyser 2013-02-12 22:53:36

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')