我在 Win10 x64 上使用 Python 3.6。
print(10**10**10**10)
这不应该引发错误吗?当我运行它时,它只是不打印任何内容,但不会引发任何错误。没有溢出错误,没有内存错误,什么都没有。现在已经运行了大约 10 分钟。我想,它正在忙着计算?我怎样才能知道到底发生了什么?
剧本还没有完成。(即 PyCharm 不打印退出代码 0)这是为什么?
更普遍:
如果我事先不知道涉及的计算量,我该如何捕捉这样的情况?我想阻止脚本“永远”陷入这样的困境,而不给我任何需要处理的错误。
.
解决方案:
正如下面 Arthur Spoon 所指出的,OverflowError
使用整数时不会引发。如果你想能够抓住一个“太大而无法在合理的时间内计算”-错误,在这些情况下,最简单的方法是仅显式地仅使用浮点数。
至少这适用于求幂,因为print(10**10**10.0)
已经抛出了OverflowError
.
另一种选择是使用类似的东西signal
来限制执行时间处理时间你的那段剧本。
答案就在Python 文档OverflowError https://docs.python.org/3.5/library/exceptions.html#OverflowError:
异常溢出错误
当算术运算的结果太大而无法表示时引发。对于整数来说,这种情况不会发生(这宁愿引发 MemoryError 而不是放弃)。
所以我猜解决方案是:明确地与float
数字。然而,文档的其余部分说明了大多数浮点运算也没有被检查......我知道一个事实是太大exp(x)
将提出OverflowError
.
编辑:为您处理该问题的解决方案可能是自己引发异常,具体取决于 python 执行您感兴趣的代码所需的时间。我不是这方面的专家,但您有有几种可能的方法here https://stackoverflow.com/questions/366682/how-to-limit-execution-time-of-a-function-call-in-python.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)