Как я останавливаю исключения, повреждающие мою цепочку делегата?

Я не понял названия атрибутов, и вы не упомянули, по каким возрастным группам вам нужно разделить ваши данные. В своем ответе я буду относиться к данным, как если бы атрибуты были:

index, name, age, friend

Чтобы найти количество друзей по имени, я бы предложил вам использовать groupby .

вход:

groups = df.groupby([df.iloc[:,0],df.iloc[:,1]]) # grouping by name(0), age(1)
amount_of_friends_df = groups.size() # gathering amount of friends for a person
print(amount_of_friends_df)

выход:

name  age
EUNK  25     1
FBFM  26     1
MYYD  30     1
OBBF  28     2
RJCW  25     1
RQTI  21     1
VLIP  16     1
ZCWQ  18     1
ZMQE  27     1

Чтобы найти количество друзей по возрасту, вы также можете использовать группы

вход:

[113 ]

вывод:

    age  amount_of_friends
0   16                  1
1   18                  1
2   21                  1
3   25                  2
4   26                  1
5   27                  1
6   28                  2
7   30                  1

Чтобы подсчитать среднее количество друзей в возрастной группе, вы можете использовать категорий и групповой.

входные данные:

mean_by_age_group_df = age_friends.groupby(pd.cut(age_friends.age,[20,40,60,72]))\
.agg({'amount_of_friends':'mean'})
print(mean_by_age_group_df)

pd.cut возвращает набор функций, которые мы используем для группировки данных. Затем мы используем функцию agg для агрегирования групп в кадре данных.

вывод:

          amount_of_friends
age                        
(20, 40]           1.333333
(40, 60]                NaN
(60, 72]                NaN

8
задан Joel in Gö 12 January 2009 в 11:51
поделиться

2 ответа

При простом вызове делегата это назовет все целевые методы в порядке. Необходимо использовать GetInvocationList если Вы хотите выполнить их индивидуально - например:

  • проверять Cancel после каждого
  • получать возвращаемое значение каждого
  • продолжаться после отказа отдельной цели

Что касается лучшего способа использовать его: как Вы хотите, чтобы это вело себя? Это не ясно мне..., например, это могло бы удовлетворить дополнительному методу вполне хорошо:

static void InvokeIgnoreErrors(this EventHandler handler,
        object sender) {
    if(handler != null) {
        foreach(EventHandler subHandler in handler.GetInvocationList()) {
            subHandler(sender, EventArgs.Empty);
        }
    }
}

Затем можно просто звонить myHandler.InvokeIgnoreErrors(this); (например).

Другой пример мог бы быть:

static bool InvokeCheckCancel(this CancelEventHandler handler,
        object sender) {
    if(handler != null) {
        CancelEventArgs args = new CancelEventArgs(false);
        foreach(CancelEventHandler subHandler in handler.GetInvocationList()) {
            subHandler(sender, args);
            if(args.Cancel) return true;
        }
    }
    return false;
}

который останавливается после того, как первое событие запрашивает отмену.

12
ответ дан 5 December 2019 в 13:02
поделиться

Вместо того, чтобы изменяться, как Вы вызываете события, я думаю, что необходимо рассмотреть обработчики событий. По-моему, методы обработчика событий должны всегда писаться так, они "безопасны", и никогда исключения, которым позволяют, не распространяют. Это особенно важно при обработке событий в коде GUI, где событие вызывается внешним кодом, но хорошей привычкой иметь в любом случае.

1
ответ дан 5 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: