On Dec 30, 10:00 am, Brian D <brianden...@gmail.com> wrote: > What I don't understand is how to test for a valid URL request, and > then jump out of the "while True" loop to proceed to another line of > code below the loop. There's probably faulty logic in this approach. I > imagine I should wrap the URL request in a function, and perhaps store > the response as a global variable. > > This is really more of a basic Python logic question than it is a > urllib2 question.
There, I've condensed your question to what you really meant to say. You have several approaches. First, let's define some useful objects: >>> max_attempts = 5 >>> def do_something(i): assert 2 < i < 5 Getting back to original question, if you want to limit the number of attempts, don't use a while, use this: >>> for count in xrange(max_attempts): print 'attempt', count+1 do_something(count+1) attempt 1 Traceback (most recent call last): File "<pyshell#55>", line 3, in <module> do_something(count+1) File "<pyshell#47>", line 2, in do_something assert 2 < i < 5 AssertionError If you want to keep exceptions from ending the loop prematurely, you add this: >>> for count in xrange(max_attempts): print 'attempt', count+1 try: do_something(count+1) except StandardError: pass Note that bare except clauses are *evil* and should be avoided. Most exceptions derive from StandardError, so trap that if you want to catch errors. Finally, to stop iterating when the errors cease, do this: >>> try: for count in xrange(max_attempts): print 'attempt', count+1 try: do_something(count+1) raise StopIteration except StandardError: pass except StopIteration: pass attempt 1 attempt 2 attempt 3 Note that StopIteration doesn't derive from StandardError, because it's not an error, it's a notification. So, throw it if and when you want to stop iterating. BTW, note that you don't have to wrap your code in a function. do_something could be replaced with it's body and everything would still work. -- http://mail.python.org/mailman/listinfo/python-list