nested list comprehension using intermediate result
Posted
by
KentH
on Stack Overflow
See other posts from Stack Overflow
or by KentH
Published on 2012-06-26T15:01:14Z
Indexed on
2012/06/26
15:16 UTC
Read the original article
Hit count: 153
python
I am trying to grok the output of a function which doesn't have the courtesy of setting a result code. I can tell it failed by the "error:" string which is mixed into the stderr stream, often in the middle of a different conversion status message.
I have the following list comprehension which works, but scans for the "error:" string twice. Since it is only rescanning the actual error lines, it works fine, but it annoys me I can't figure out how to use a single scan. Here's the working code:
errors = [e[e.find('error:'):] for e in err.splitlines() if 'error:' in e]
The obvious (and wrong) way to simplify is to save the "find" result
errors = [e[i:] for i in e.find('error:') if i != -1 for e in err.splitlines()]
However, I get "UnboundLocalError: local variable 'e' referenced before assignment". Blindly reversing the 'for's in the comprehension also fails. How is this done?
THanks. Kent
© Stack Overflow or respective owner