Ваш блок try
выходит сразу после запуска новой задачи, потому что этот метод просто продолжает работать.
Вместо этого вы можете поймать исключение как AggregateException , где вы ожидаете завершения задачи (или нескольких задач):
var task1 = Task.Factory.StartNew(() =>
{
throw new MyCustomException("I'm bad, but not too bad!");
});
try
{
task1.Wait();
}
catch (AggregateException ae)
{
// Assume we know what's going on with this particular exception.
// Rethrow anything else. AggregateException.Handle provides
// another way to express this. See later example.
foreach (var e in ae.InnerExceptions)
{
if (e is MyCustomException)
{
Console.WriteLine(e.Message);
}
else
{
throw;
}
}
}
Это довольно просто действительно:
a[start:stop] # items start through stop-1
a[start:] # items start through the rest of the array
a[:stop] # items from the beginning through stop-1
a[:] # a copy of the whole array
существует также эти step
значение, которое может использоваться с любым вышеупомянутым:
a[start:stop:step] # start through not past stop, by step
ключевой пункт для запоминания - то, что эти :stop
значение представляет первое значение, которое является не в выбранной части. Так, различием между stop
и start
является выбранное число элементов (если step
1, значение по умолчанию).
другая функция - то, что start
или stop
может быть отрицательны число, что означает, что оно рассчитывает от конца массива вместо начала. Так:
a[-1] # last item in the array
a[-2:] # last two items in the array
a[:-2] # everything except the last two items
Точно так же step
может быть отрицательное число:
a[::-1] # all items in the array, reversed
a[1::-1] # the first two items, reversed
a[:-3:-1] # the last two items, reversed
a[-3::-1] # everything except the last two items, reversed
Python добр к программисту, если существует меньше объектов, чем Вы просите. Например, если Вы просите [1 114], и a
только содержит один элемент, Вы получаете пустой список вместо ошибки. Иногда Вы предпочитали бы ошибку, таким образом, необходимо знать, что это может произойти.
режущий оператор []
на самом деле используется в вышеупомянутом коде с slice()
объект с помощью :
нотация (который только допустим в [1 120]), т.е.:
a[start:stop:step]
эквивалентно:
a[slice(start, stop, step)]
объекты Части также ведут себя немного по-другому в зависимости от количества аргументов, так же к [1 121], т.е. и slice(stop)
и slice(start, stop[, step])
поддерживаются. Для пропуска определения данного аргумента можно было бы использовать None
, так, чтобы, например, a[start:]
было эквивалентно [1 126], или a[::-1]
эквивалентно [1 128].
, В то время как :
- базирующаяся нотация очень полезна для простого разрезания, конкретного вида использования [1 130], объекты упрощают программное поколение разрезания.
И несколько вещей, которые не были сразу очевидны для меня, когда я увидел режущий синтаксис в первый раз:
>>> x = [1,2,3,4,5,6]
>>> x[::-1]
[6,5,4,3,2,1]
Простой способ инвертировать последовательности!
И если Вы хотели, по некоторым причинам, каждый второй объект в обратной последовательности:
>>> x = [1,2,3,4,5,6]
>>> x[::-2]
[6,4,2]
Перечисление возможностей, позволенных грамматикой:
>>> seq[:] # [seq[0], seq[1], ..., seq[-1] ]
>>> seq[low:] # [seq[low], seq[low+1], ..., seq[-1] ]
>>> seq[:high] # [seq[0], seq[1], ..., seq[high-1]]
>>> seq[low:high] # [seq[low], seq[low+1], ..., seq[high-1]]
>>> seq[::stride] # [seq[0], seq[stride], ..., seq[-1] ]
>>> seq[low::stride] # [seq[low], seq[low+stride], ..., seq[-1] ]
>>> seq[:high:stride] # [seq[0], seq[stride], ..., seq[high-1]]
>>> seq[low:high:stride] # [seq[low], seq[low+stride], ..., seq[high-1]]
, Конечно, если (high-low)%stride != 0
, то конечная точка будет немного ниже, чем high-1
.
, Если stride
отрицательно, упорядочивание изменяется немного, так как мы считаем в обратном порядке:
>>> seq[::-stride] # [seq[-1], seq[-1-stride], ..., seq[0] ]
>>> seq[high::-stride] # [seq[high], seq[high-stride], ..., seq[0] ]
>>> seq[:low:-stride] # [seq[-1], seq[-1-stride], ..., seq[low+1]]
>>> seq[high:low:-stride] # [seq[high], seq[high-stride], ..., seq[low+1]]
Расширенное разрезание (с запятыми и замещающими знаками) главным образом используются только специальными структурами данных (как NumPy); основные последовательности не поддерживают их.
>>> class slicee:
... def __getitem__(self, item):
... return repr(item)
...
>>> slicee()[0, 1:2, ::5, ...]
'(0, slice(1, 2, None), slice(None, None, 5), Ellipsis)'
переговоры по учебному руководству Python об этом (прокручивают немного вниз, пока Вы не добираетесь до части о разрезании).
схема ASCII-творчества полезна также для запоминания, как работают части:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
Один способ помнить, как работа частей должна думать об индексах как об указании между , символы, с левым краем первого символа пронумеровали 0. Затем правый край последнего знака строки n символы имеет индекс n .
strdup()
не Стандартная функция. Ее работы, на тех реализациях, которые предлагают его как расширение, могут отличаться от реализации до реализации. Я предпочитаю malloc()
и strcpy()
при необходимости. Это wasn' t должен был продемонстрировать, как удалить первые и последние символы строки.
– pmg
13 November 2009 в 10:32
Я использую "индексные точки между элементами" метод размышления об этом сам, но один способ описать это, который иногда помогает другим получить его, является этим:
mylist[X:Y]
X индекс первого элемента, который Вы хотите.
Y является индексом первого элемента, который Вы не делаете , хотят.
После использования его немного я понимаю, что самое простое описание - то, что это - точно то же как аргументы в for
цикл...
(from:to:step)
Любой из них является дополнительным:
(:to:step)
(from::step)
(from:to)
Затем для отрицательной индексации просто нужны Вы для добавления длины строки к отрицательным индексам для понимания этого.
Это работает на меня так или иначе...
Я лично думаю об этом как для цикла
a[start:end:step]
# for(i = start; i < end; i += step)
Также примечание, что отрицательные величины для start
и end
относительно конца списка.