[Python-ideas] The async API of the future: yield-from
Guido van Rossum
guido at python.org
Sun Oct 14 23:30:21 CEST 2012
On Sun, Oct 14, 2012 at 12:38 PM, Terry Reedy <tjreedy at udel.edu> wrote:
> On 10/14/2012 1:42 PM, Guido van Rossum wrote:
>> On Sun, Oct 14, 2012 at 10:27 AM, Terry Reedy <tjreedy at udel.edu> wrote:
>>> On 10/14/2012 10:36 AM, Guido van Rossum wrote:
>>>> Of course there's the question of what to do when one of the tasks
>>>> raises an error -- I haven't quite figured that out in NDB either, it
>>>> runs all the tasks to completion but the caller only sees the first
>>>> exception. I briefly considered having an "multi-exception" but it
>>>> felt too weird -- though I'm not married to that decision.
>
>>> One answer is to append the exception object to results and let the
>>> requesting code sort out what to do.
>>>
>>>
>>> def par(*args):
>>> results = []
>>> for task in args:
>>> try:
>>>
>>> result = yield from task
>>> results.append(result)
>>> except Exception as exc:
>>> results.append(exc)
>>> return results
>>
>> But then the caller would have to sort through the results and check
>> for exceptions. I want the caller to be able to use try/except as
>> well.
>
> OK. Then ...
>
> def par(*args):
> results = []
> exceptions = False
> for task in args:
> try:
> result = yield from task
> results.append(result)
> except Exception as exc:
> results.append(exc)
> exceptions = True
> if not exceptions:
> return results
> else:
> exc = MultiXException()
> exc.results = results
> raise exc
>
> Is this is what you meant by 'multi-exception'?
Yes.
> caller:
>
> try:
> results = <whatever>
> <process results, perhaps by iterating thru them, knowing all represent
> successed>
> except MultiXException as exc:
> errprocess(exc.results)
In NDB I have yet to encounter a situation where I care.
--
--Guido van Rossum (python.org/~guido)
More information about the Python-ideas
mailing list