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 ¶
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()