我是編程新手,我不確定如何解決這個問題。如何爲堆棧溢出/下溢創建錯誤消息
我想提出一個錯誤,當一個整數超過最大整數...所以我導入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
代表整數;過渡是自動的。
在計算斐波納契數列時,您不太可能達到這個記憶極限。
[Here's](http://stackoverflow.com/q/9860588/ 645270)關於主題的線程 – keyser 2013-02-12 22:53:36
正如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')
請發佈*完整* [示例](http://sscce.org)。這只是一個打印,這當然對程序的邏輯沒有影響。 – phihag 2013-02-12 22:49:00
你是說它沒有崩潰_and_它不是打印你的消息?在這種情況下,只需調試你的代碼。 – keyser 2013-02-12 22:49:23
實際上,Python整數可以和內存允許的一樣大。嘗試一下; 'import sys; sys.maxint * 2'。 – 2013-02-12 22:51:44