Python:巨大的指数获得STUCK,但不会引发错误

时间:2017-07-30 18:03:40

标签: python exception

我在Win10 x64上使用Python 3.6。

print(10**10**10**10)

这不应该引发错误吗?当我运行它时,它只是不打印任何东西,但没有引发错误。没有OverflowError,没有MemoryError,没有。它已经运行了10分钟。我想,它正在忙着计算?我怎样才能知道实际发生了什么?

它没有完成脚本。(即PyCharm没有打印退出代码0)为什么会这样?

更一般地说:

如果我不知道预先计算的计算量,我怎么能抓住这样的情况?我想阻止脚本像这样“永远”地卡住而不给予我可以使用任何错误。

SOLUTION:

正如下面的Arthur Spoon所指出的那样,使用整数时不会引发OverflowError。如果你希望能够捕获“太大而无法在合理的时间内计算”-error ,那么在这些情况下最简单的方法就是只使用浮点数。

至少这与指数有关,因为print(10**10**10.0)已经抛出OverflowError

另一种选择是使用类似signal的内容来限制脚本的执行时间

2 个答案:

答案 0 :(得分:2)

答案在Python documentation for OverflowError

  

异常OverflowError

     

当算术运算的结果太大而无法表示时引发。整数不会发生这种情况(宁可提出MemoryError而不是放弃)。

所以解决方法是,我猜:明确使用B数字。然而,其余的文档说明了大多数浮点运算没有被检查......我知道一个太大float会引发exp(x)的事实。

编辑:解决这个问题的解决办法可能是自己提出一个Exception,这取决于python执行你感兴趣的一些代码所花费的时间。我不是专家这样做,但你有几种可能的方法here

答案 1 :(得分:0)

正在计算这就是为什么它不会给你一个错误。它最终会给你一个答案,如果你有无限的时间和空间(内存),但你想要计算的数字是如此之大,以至于你的计算机绝对没有足够的内存。

我不确定如何能够想象你在这里计算的这个数字有多大。 它是1后跟10 ^ 10,000,000,000个零。这远远大于 Googol Number ,即10 ^ 100。这是1之后有100个零。这是一个巨大的数字!!

Googol有多大?从视角来看,有Estimate the total number of fundamental particles in the observable universe is 10^80,其中一个后跟80个零。 Googol比那更重要。而你正试图计算一个比Googol大得多的数字。