-3

これは私の次のプログラムです

try:
    class __Euler3__:
    n = 600851475143
    primeFactors = []

    for i in range(2,n):
        if (n%i ==0):
            primeFactors.append(i)
            n = n/i
            i = i -1 #reset i
            print primeFactors

except OverflowError as e:
       print "the error is" , e

しかし、何らかの理由で、Overflowerror メカニズムはこの例外をキャッチできません。私は python 2.7 を使用しています。

4

3 に答える 3

5

数値が大きすぎるために数値を表現できない場合、OverflowErrorが発生します。これは、Python整数では発生しません(long大きくなりすぎるとシームレスに変換され、python3ではすべての整数がlong任意精度になります)。

ドキュメントから直接引用(いくつかの強調を追加):

算術演算の結果が大きすぎて表現できない場合に発生します。これは、長整数(あきらめるよりもMemoryErrorを発生させる)や、代わりに長整数を返すプレーン整数を使用するほとんどの操作では発生しません。Cでは浮動小数点例外処理が標準化されていないため、ほとんどの浮動小数点演算もチェックされません。

于 2012-11-05T20:29:29.967 に答える
0

mgilsonが指摘したように、OverflowErrorは発生しません。将来、コードがサイレントに終了するか機能するかを確認したい場合は、try / exception/elseを使用できます。

try:
    foo()
    baz()
except:
    print "error"
else:
    print "no error!"
于 2012-11-05T20:32:58.867 に答える
0

このスレッドhttp://www.velocityreviews.com/forums/t701480-for-loop-range-result-has-too-many-items.htmlによると、 range() はシステムによってはオーバーフロー エラーを発生させる可能性があります。Python 2.7 を使用して 32 ビット システムでこのコードを実行します。「OverflowError('range() result has too many items',)」が表示されます

于 2012-11-05T20:52:12.513 に答える