如何在打印输出中传递RuntimeWarning?

时间:2018-04-19 15:15:38

标签: python compiler-errors save runtime

我运行我的代码,它运行正常。因为它包含随机数,所以这些数字中的一些导致代码中函数的值无效(这是正常的,我们不知道哪个数字导致无效值)。但是在打印中,Python会继续打印,并且只会为这些数字显示一次或两次错误:

RuntimeWarning: invalid value encountered in...

如下:

.
.
.
174.45044049634845 0.2462826944657234 0.07030551312264746 0.5748635625886386
173.507852282145 0.22849596593782928 0.02418486733987143 0.5342742271386651
172.72866355236476 0.23561628491593717 0.00276512493464073 0.5299714003809053

Warning (from warnings module):
  File "C:\...        return (Om*(1+z)**3+omg0*(1+z)**6+(1-Om-omg0))**(-0.5)
RuntimeWarning: invalid value encountered in double_scalars

Warning (from warnings module):
  File "C:\...", line 364
    warnings.warn(msg, IntegrationWarning)
IntegrationWarning: The occurrence of roundoff error is detected, which prevents
  the requested tolerance from being achieved.  The error may be
  underestimated.

Warning (from warnings module):
  File "C:\...", line 1874
    r = _umath_linalg.det(a, signature=signature)
RuntimeWarning: invalid value encountered in det
172.72866355236476 0.23561628491593717 0.00276512493464073 0.5299714003809053
172.83987258470256 0.23561628491593717 0.00276512493464073 0.521804452272765
172.94243737214325 0.23561628491593717 0.00276512493464073 0.5142747330950714
173.81824790232395 0.2447458303542599 -0.014745034802849322 0.3863934727161802
173.81824790232395 0.2447458303542599 -0.014745034802849322 0.3863934727161802
175.04959056025322 0.2447458303542599 -0.014745034802849322 0.2964727561196514
.
.
.

Python继续打印,但我无法将它们保存在文件中,我必须复制并粘贴。如果我们有5,000,000个数据,则无法实现。

有没有办法在文件中写这些输出?

2 个答案:

答案 0 :(得分:0)

通过在try块中包装违规行来自行处理异常:

try:
    r = _umath_linalg.det(a, signature=signature)
except RuntimeError as ex:
    error_file.write(ex)

答案 1 :(得分:0)

正如您所提到的,warningserrors是保存文件中数据的障碍,因此我们需要将其删除。您可以使用以下方法禁用WarningError

import warnings
warnings.filterwarnings("ignore")

位于代码顶部。然后,您可以用text file编写输出。

此外,您可以使用try and except块,但请记住这些块对程序的速度非常不利。如果您希望程序打印出10,000,000,即使使用群集pc,也需要很长时间。