Поймайте два типа предупреждений - PullRequest
2 голосов
/ 17 июня 2020

Итак, я хочу поймать разные типы предупреждений в следующем коде:

score = cross_val_score(DecisionTreeClassifier(), X, y, scoring=f2_measure, cv=cv)

После запуска кода я получил два предупреждения:

UserWarning: The least populated class in y has only 1 members, which is less than n_splits=2.
  % (min_groups, self.n_splits)), UserWarning)

UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no true nor predicted samples. 
  Use `zero_division` parameter to control this behavior.

Я хотел бы поймать оба типа предупреждений, а затем обработать их по отдельности, я попытался использовать следующее:

with warnings.catch_warnings():
    warnings.filterwarnings('error', category=UserWarning)
    warnings.filterwarnings('error', category=UndefinedMetricWarning)
    try:
        score = cross_val_score(DecisionTreeClassifier(), X, y, scoring=f2_measure, cv=cv).mean()
    except (UndefinedMetricWarning, UserWarning) as e:
        print(type(e))

Но все предупреждения затем выдаются как UserWarning, а UndefinedMetricWarning нет. (Я не совсем уверен, но думаю, что эта проблема может быть вызвана тем, что UndefinedMetricWarning унаследовано от UserWarning).

Как идентифицировать и обрабатывать эти два типа предупреждений по отдельности?

...