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

Функция seterrcall

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

Синтаксис

np.seterrcall(callable)

Параметры функции:

  • callable - пользовательская функция обратного вызова. Она должна принимать три параметра: тип ошибки (например, 'divide' или 'over'), текст ошибки и объект ошибки типа Warning или Error. Если передать None, то функция сбрасывает ранее установленный обработчик.

Возвращаемое значение: предыдущая функция обратного вызова, если она была установлена, или None. Это позволяет сохранять и восстанавливать обработчики.

Пример

Установим простой обработчик ошибок, который выводит информацию в консоль:

import numpy as np # User-defined error handler def error_handler(err_type, err_msg, err_obj): print(f"Error type: {err_type}") print(f"Error message: {err_msg}") print(f"Error object: {err_obj}") # Set the callback old_handler = np.seterrcall(error_handler) # Set error behavior to 'call' np.seterr(divide='call', over='call') # Trigger a division by zero error arr = np.array([1, 0, 2]) res = np.divide(1, arr)

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

Error type: divide Error message: divide by zero encountered in divide Error object: <numpy.core._exceptions.UFuncWarning object at 0x...>

Пример

Создадим обработчик, который сохраняет информацию об ошибках в список для последующего анализа:

import numpy as np # List to store error logs error_log = [] # User-defined error handler def log_handler(err_type, err_msg, err_obj): error_log.append({ 'type': err_type, 'message': err_msg, 'object': err_obj }) print(f"Logged error: {err_type} - {err_msg}") # Set the callback np.seterrcall(log_handler) np.seterr(divide='call', over='call') # Trigger some errors arr1 = np.array([1, 0, 3]) res1 = np.divide(1, arr1) arr2 = np.array([1e308, 1e308]) res2 = np.multiply(arr2, arr2) print(f"Total errors logged: {len(error_log)}")

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

Logged error: divide - divide by zero encountered in divide Logged error: over - overflow encountered in multiply Total errors logged: 2

Пример

Сбросим установленный обработчик, передав None в функцию:

import numpy as np # User-defined error handler def custom_handler(err_type, err_msg, err_obj): print(f"Handling error: {err_type}") # Set the callback old_handler = np.seterrcall(custom_handler) np.seterr(divide='call') # Trigger an error arr = np.array([1, 0, 2]) res = np.divide(1, arr) # Reset callback np.seterrcall(None) print("Callback reset") # Trigger another error res = np.divide(1, arr)

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

Handling error: divide Callback reset

После сброса обработчика ошибка больше не обрабатывается пользовательской функцией.

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

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