这是我的以下计划
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
答案 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()结果有太多项',)”