我运行我的代码,它运行正常。因为它包含随机数,所以这些数字中的一些导致代码中函数的值无效(这是正常的,我们不知道哪个数字导致无效值)。但是在打印中,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个数据,则无法实现。
有没有办法在文件中写这些输出?
答案 0 :(得分:0)
通过在try块中包装违规行来自行处理异常:
try:
r = _umath_linalg.det(a, signature=signature)
except RuntimeError as ex:
error_file.write(ex)
答案 1 :(得分:0)
正如您所提到的,warnings
和errors
是保存文件中数据的障碍,因此我们需要将其删除。您可以使用以下方法禁用WarningError
:
import warnings
warnings.filterwarnings("ignore")
位于代码顶部。然后,您可以用text file
编写输出。
此外,您可以使用try and except
块,但请记住这些块对程序的速度非常不利。如果您希望程序打印出10,000,000
,即使使用群集pc,也需要很长时间。