РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
312 of 541 menu

Функция seterr

Функция seterr управляет тем, как NumPy реагирует на ошибки при выполнении числовых операций. Она позволяет настроить поведение для различных типов ошибок: деление на ноль, переполнение, выход за пределы допустимых значений и другие. Функция принимает словарь, в котором ключами являются типы ошибок, а значениями - режимы обработки. Она возвращает предыдущие настройки в виде словаря.

Синтаксис

np.seterr(divide='mode', over='mode', under='mode', invalid='mode')

В качестве параметров передаются строки, определяющие режим обработки для конкретного типа ошибки. Возможные значения режимов: 'ignore' (игнорировать ошибку), 'warn' (выводить предупреждение), 'raise' (генерировать исключение), 'call' (вызвать пользовательскую функцию) и 'log' (записывать ошибку в лог).

Пример

Рассмотрим базовое использование функции seterr для настройки реакции на деление на ноль:

import numpy as np # Сохраняем текущие настройки old_settings = np.seterr(divide='warn') print("Текущие настройки:", old_settings) # Операция, вызывающая деление на ноль arr = np.array([1.0, 2.0, 3.0]) res = arr / 0.0 print(res) # Возвращаем старые настройки np.seterr(**old_settings)

Результат выполнения кода:

Текущие настройки: {'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'} RuntimeWarning: divide by zero encountered in divide [inf inf inf]

В этом примере мы настроили реакцию на деление на ноль как предупреждение, после чего выполнили операцию, вызвавшую ошибку, и получили предупреждение, а также бесконечность в результате.

Пример

Настройка функции seterr на генерацию исключения при переполнении:

import numpy as np # Настраиваем переполнение как исключение old_settings = np.seterr(over='raise') try: # Создаем массив и вызываем переполнение arr = np.array([1e308, 1e308]) res = arr * 1e308 print(res) except FloatingPointError as e: print("Перехвачено исключение:", e) finally: # Восстанавливаем настройки np.seterr(**old_settings)

Результат выполнения кода:

Перехвачено исключение: overflow encountered in multiply

Теперь при возникновении переполнения вместо молчаливого вычисления возвращается бесконечность, а генерируется исключение, которое можно перехватить и обработать.

Пример

Настройка функции seterr с использованием режима 'ignore' для игнорирования ошибок:

import numpy as np # Игнорируем все ошибки old_settings = np.seterr(all='ignore') # Операции, которые могли бы вызвать ошибки arr1 = np.array([1.0, 2.0, 3.0]) res1 = arr1 / 0.0 print("Результат деления на ноль:", res1) arr2 = np.array([1e308, 1e308]) res2 = arr2 * 1e308 print("Результат переполнения:", res2) # Восстанавливаем настройки np.seterr(**old_settings)

Результат выполнения кода:

Результат деления на ноль: [inf inf inf] Результат переполнения: [inf inf]

При использовании режима 'ignore' ошибки не выводятся, но результаты вычислений всё равно содержат специальные значения, такие как inf или nan.

Пример

Сохранение и восстановление настроек с помощью функции seterr:

import numpy as np # Сохраняем текущие настройки old_settings = np.seterr() print("Исходные настройки:", old_settings) # Изменяем настройки np.seterr(divide='ignore', over='warn') print("Новые настройки:", np.seterr()) # Восстанавливаем исходные настройки np.seterr(**old_settings) print("Восстановленные настройки:", np.seterr())

Результат выполнения кода:

Исходные настройки: {'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'} Новые настройки: {'divide': 'ignore', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'} Восстановленные настройки: {'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}

Важно всегда сохранять старые настройки и восстанавливать их после выполнения операций, чтобы не влиять на другое поведение программы.

Смотрите также

  • функцию geterr,
    которая возвращает текущие настройки обработки ошибок
  • функцию seterrcall,
    которая устанавливает пользовательскую функцию для режима 'call'
  • функцию geterrcall,
    которая возвращает текущую пользовательскую функцию для режима 'call'
  • функцию set_printoptions,
    которая настраивает форматирование вывода массивов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить