[Tutor] Interacting with stderr

Alan Gauld alan.gauld at btinternet.com
Sun Aug 31 17:15:28 CEST 2014


On 31/08/14 14:25, Crush wrote:
> Alan said,
>
> "... you are reassigning p in the middle of a loop that
> depends on p. That's usually not a good idea..."
>
> If not what I changed my code to, then I reckon I do not
 > understand what he is suggesting I do.

Your original code looked like this:

p = subprocess()
for line in p.stderr:
     if some condition:
        p = subprocess()   # now reassigned p to a new subprocess
        for line in p.stderr:
            do stuff

So the question is:
What happens to the outer loop when you finish 'do stuff'?

It may be that it is doing what you want, or it may be that
you want to break the outer loop when your some condition
succeeds. I'm not sure?

If you do want to exit the outer loop a more explicit
way would be to set a flag and break:

p = subprocess()
for line in p.stderr:
     if some condition:
        some_flag = True
        break
     elif other condition:
        other_flag = True
        break

if some_flag:
     p = subprocess()
     for line in p.stderr:
         do stuff
elif other_flag:
     do other stuff

But I haven't read through the code in enough detail to be
sure what you are doing, it was just a general observation
that resetting the the thing that your loop depends on
is usually a bad idea. A bit like cutting off the branch
of the tree that you are standing on...

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.flickr.com/photos/alangauldphotos



More information about the Tutor mailing list