I did investigate it a bit more. I could find that somehow if a StopIteration is raised from the body part of a "[ body for var in iterable]", it raises a StopIteration which is not caught. However if one instead uses a generator expression ie. (body for var in iterable) it does not seem to quite work that way (probably because the StopIteration is executed only later).
So :
for var in iterable :
body
will raise an exception, as will
[body for var in iterable] and
for var in [body for var in iterable]
but the following will not
[var for var in (body for var in iterable)] nor will
delim.join(body for var in iterable) and many other situations nor will
list(body for var in iterable)
So in that sense the [body for var in iterable] behaves most like a for loop. And a StopIteration exception from body will propagate outwards.
I looked for specific information in the python documentation, but at least could not find it in one casual search. My hypothesis is that unlike most situations where "body for var in iterable" is a generator, "[body for var in iterable]" forces an evaluation thus materialising the results of the generator. This materialisation triggers the StopIteration which propagates / bubbles up. When the output of the expression is a generator, typically the recipient of such an expression has the necessary logic to terminate the iteration on receipt of a StopIteration. The best guess I could make is that when the parameter of a function or a broader expression is a list comprehension, such a comprehension is materialised independently (just like expressions in a function invocation are evaluated before passing the results to a function) and if that raises a StopIteration in the body of the comprehension then there is no outer try/catch yet in place to capture it and terminate the loop (since the list must be first materialised before getting passed to the function or rest of the expression that it is a part of.
That might sound confusing .. but perhaps in a less tired state I just might be able to explain better.
Any links to python language specification sections which might better explain this behaviour would be appreciated.