-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

当您无法表示数字时会引发溢出错误,因为它太大了。python整数不会发生这种情况(因为long当它们变得太大时它们会无缝地变成,并且在python3中所有整数都是long任意精度的。)。

直接引用文档(添加了一些重点):

当算术运算的结果太大而无法表示时引发。这不会发生在长整数(宁愿引发 MemoryError 而不是放弃)和大多数使用纯整数的操作中,而是返回长整数。由于 C 中浮点异常处理缺乏标准化,大多数浮点运算也没有被检查。

于 2012-11-05T20:29:29.967 回答
0

正如 mgilson 指出的那样,没有引发 OverflowError 。以后如果要检查代码是静默退出还是正常工作,可以使用try/except/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 位系统上运行此代码。我得到“溢出错误('范围()结果有太多项目',)”

于 2012-11-05T20:52:12.513 回答