Обработка ошибок с плавающей точкой#
Настройки обработки ошибок хранятся в contextvars
позволяя разным потокам или асинхронным задачам иметь независимые конфигурации.
Для получения дополнительной информации см. Потокобезопасность.
Как NumPy обрабатывает числовые исключения#
По умолчанию 'warn' для invalid, divide, и overflow
и 'ignore' для underflow. Но это можно изменить, и можно установить индивидуально для разных типов исключений. Различные поведения:
'ignore': Не предпринимать действий при возникновении исключения.'warn': ВывестиRuntimeWarning(через Pythonwarningsмодуль).'raise': ВызватьFloatingPointError.'call': Вызвать указанную функцию.'print': Вывести предупреждение напрямую вstdout.'log': Записать ошибку в объект Log.
Эти поведения могут быть установлены для всех видов ошибок или конкретных:
all: применить ко всем числовым исключениямinvalid: когда генерируются NaNdivide: деление на ноль (для целых чисел тоже!)overflow: переполнение чисел с плавающей запятойunderflow: потери точности при операциях с плавающей запятой
Обратите внимание, что целочисленное деление на ноль обрабатывается тем же механизмом.
Режим обработки ошибок можно настроить numpy.errstate
менеджер контекста.
Примеры#
>>> with np.errstate(all='warn'):
... np.zeros(5, dtype=np.float32) / 0.0
:2: RuntimeWarning: invalid value encountered in divide
array([nan, nan, nan, nan, nan], dtype=float32)
>>> with np.errstate(under='ignore'):
... np.array([1.e-100])**10
array([0.])
>>> with np.errstate(invalid='raise'):
... np.sqrt(np.array([-1.]))
...
Traceback (most recent call last):
File "" , line 2, in
np.sqrt(np.array([-1.]))
~~~~~~~^^^^^^^^^^^^^^^^^
FloatingPointError: invalid value encountered in sqrt
>>> def errorhandler(errstr, errflag):
... print("saw stupid error!")
>>> with np.errstate(call=errorhandler, all='call'):
... np.zeros(5, dtype=np.int32) / 0
saw stupid error!
array([nan, nan, nan, nan, nan])
Установка и получение обработки ошибок#
|
Установить, как обрабатываются ошибки с плавающей запятой. |
|
Получите текущий способ обработки ошибок с плавающей запятой. |
|
Установите функцию обратного вызова ошибок с плавающей запятой или объект журнала. |
Возвращает текущую функцию обратного вызова, используемую при ошибках с плавающей запятой. |
|
|
Контекстный менеджер для обработки ошибок с плавающей точкой. |