Как передать RuntimeWarning в вывод на печать?
Я запускаю свой код, и он работает правильно. Поскольку он содержит случайные числа, некоторые из этих чисел приводят к недопустимым значениям для функций в коде (это нормально, и мы не знаем, какое число приводит к недопустимому значению). Но при печати 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 ответа
Как вы упомянули, warnings
а также errors
являются барьерами для сохранения данных в файле, поэтому нам нужно их удалить. Вы можете отключить WarningError
с использованием:
import warnings
warnings.filterwarnings("ignore")
в верхней части вашего кода. Затем вы можете написать вывод в text file
,
Также вы можете использовать try and except
блоки, но помните, что такие блоки очень плохо влияют на скорость программы. Если вы ожидаете, что ваша программа распечатает 10,000,000
даже с кластерами шт вам нужно долго.
Обработайте исключение самостоятельно, обернув ошибочную строку в блок try:
try:
r = _umath_linalg.det(a, signature=signature)
except RuntimeError as ex:
error_file.write(ex)