Как передать 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 данных.

Есть ли способ записать эти выходные данные в файл?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
343
2

Ответы 2

Обработайте исключение самостоятельно, заключив вызывающую ошибку строку в блок try:

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

У меня в коде есть hhh=np.linalg.det(zz)*0.000001. где я должен написать этот код, который вы сказали

Bob 19.04.2018 18:33

Поместите try: над этой линией, а except под ней.

John Gordon 19.04.2018 18:37

Я спросил это, потому что hhh=np.linalg.det(zz)*0.000001 находится в функции. То есть, def function(....), ......, hhh=np.linalg.det(zz)*0.000001, return hhh Я никогда не использовал try и except в функциях.

Bob 19.04.2018 18:42

Как вы упомянули, warnings и errors являются препятствиями для сохранения данных в файле, поэтому нам нужно их удалить. Вы можете отключить WarningError с помощью:

import warnings
warnings.filterwarnings("ignore")

вверху вашего кода. затем вы можете записывать выходы в text file.

Также вы можете использовать блоки try and except, но помните, что такие блоки очень плохо сказываются на скорости работы программы. Если вы ожидаете, что ваша программа будет печатать 10,000,000, даже с кластерными ПК вам потребуется много времени.

Итак, эта строка кода ничего не делает с остальным кодом?

Bob 19.04.2018 19:57

Неа. откиньтесь назад и используйте как хотите :)

Ethan 19.04.2018 19:58

Другие вопросы по теме