Метод __call__ класса errstate
Метод __call__ класса errstate
позволяет вызывать экземпляр этого класса
как функцию. При вызове он возвращает новый
контекстный менеджер с теми же настройками
обработки ошибок. Это полезно для создания
нескольких блоков кода с одинаковыми
правилами обработки ошибок без повторного
определения параметров.
Синтаксис
errstate_instance(**kwargs)
Метод принимает те же именованные параметры,
что и конструктор класса errstate:
divide, over, under,
invalid. Значения могут быть
строками 'ignore', 'warn', 'raise', 'call'
или 'log'.
Пример использования
Создадим экземпляр errstate с настройками
и используем его для нескольких операций:
import numpy as np
# Create errstate instance with custom settings
err_settings = np.errstate(divide='warn', invalid='ignore')
# Use the same settings in different blocks
with err_settings():
arr = np.array([1, 0, 3])
res = np.divide(1, arr)
print("Division result:", res)
with err_settings():
arr2 = np.array([0, np.inf])
res2 = np.log(arr2)
print("Log result:", res2)
Результат выполнения кода:
Division result: [1 inf 0]
Log result: [-inf inf]
Пример с различными настройками
Используем метод __call__ для создания
контекстных менеджеров с разными уровнями
обработки ошибок:
import numpy as np
# Create errstate with ignore settings
ignore_errors = np.errstate(divide='ignore', invalid='ignore')
# Use ignore settings
with ignore_errors():
arr = np.array([0, 0])
res = np.divide(1, arr)
print("With ignore:", res)
# Create errstate with warning settings
warn_errors = np.errstate(divide='warn')
# Use warning settings
with warn_errors():
arr2 = np.array([0, 2])
res2 = np.divide(1, arr2)
print("With warning:", res2)
Результат выполнения кода:
With ignore: [inf inf]
With warning: [inf 0]
Пример с параметрами по умолчанию
Метод __call__ также позволяет
переопределять настройки при вызове:
import numpy as np
# Create base errstate
base_settings = np.errstate(divide='ignore')
# Override settings when calling
with base_settings(divide='warn', over='raise'):
arr = np.array([0, 0])
res = np.divide(1, arr)
print("With overridden settings:", res)
Результат выполнения кода:
With overridden settings: [inf inf]