在python中未检测到OverflowError异常

时间:2012-11-05 20:26:45

标签: python python-2.7

这是我的以下计划

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

3 个答案:

答案 0 :(得分:4)

当您无法表示数字时会引发OverflowError,因为它太大了。 python整数不会发生这种情况(当它们变得太大时它们会无缝转变为long,而在python3中,所有整数都是long,即任意精度。)。

直接从documentation引用(加上一些重点):

  

当算术运算的结果太大而无法表示时引发。 对于长整数(这更不会引发MemoryError而不是放弃)和大多数使用普通整数的操作都不会发生这种情况,而纯整数则返回一个长整数。由于C中缺少浮点异常处理的标准化,因此也不会检查大多数浮点运算。

答案 1 :(得分:0)

正如mgilson指出的那样,没有引发OverflowError。将来,如果要检查代码是以静默方式退出还是有效,可以使用try / except / else:

try:
    foo()
    baz()
except:
    print "error"
else:
    print "no error!"

答案 2 :(得分:0)

根据此线程http://www.velocityreviews.com/forums/t701480-for-loop-range-result-has-too-many-items.html,range()可能会根据您的系统引发溢出错误。使用python 2.7在我的32位系统上运行此代码。我得到“OverflowError('range()结果有太多项',)”