Перейти к содержанию

Callback'и

safe оборачивает callback так, чтобы исключения внутри него не терялись в C++-коде CatBoost, а нормально доходили до пользователя после завершения fit.

from catboost_utils.callbacks import safe

def my_callback(info):
    if info.iteration > 100:
        raise RuntimeError("debug")

cb = safe(my_callback)
model.fit(X, y, callbacks=[cb])
cb.raise_if_failed()   # бросит CBXError, оригинальная ошибка будет в __cause__

Поддерживаются и функции (вызываются как cb(info)), и классы с методом after_iteration(info). На первом исключении обёртка возвращает False, и CatBoost корректно завершает обучение. Все пойманные исключения доступны в cb.exceptions.

catboost_utils.callbacks.safe.safe

safe(callback: _CallbackLike) -> _SafeCallback

Wrap callback so exceptions surface after fit() instead of being lost.

Usage::

cb = safe(my_callback)
model.fit(X, y, callbacks=[cb])
cb.raise_if_failed()