How to test a URL request in a "while True" loop

Aahz aahz at pythoncraft.com
Thu Jan 14 02:31:05 CET 2010


In article <hilruv$nuv$1 at panix5.panix.com>, Aahz <aahz at pythoncraft.com> wrote:
>In article <mailman.233.1262197919.28905.python-list at python.org>,
>Philip Semanchuk  <philip at semanchuk.com> wrote:
>>
>>While I don't fully understand what you're trying to accomplish by  
>>changing the URL to google.com after 3 iterations, I suspect that some  
>>of your trouble comes from using "while True". Your code would be  
>>clearer if the while clause actually stated the exit condition. Here's  
>>a suggestion (untested):
>>
>>MAX_ATTEMPTS = 5
>>
>>count = 0
>>while count <= MAX_ATTEMPTS:
>>    count += 1
>>    try:
>>       print 'attempt ' + str(count)
>>       request = urllib2.Request(url, None, headers)
>>       response = urllib2.urlopen(request)
>>       if response:
>>          print 'True response.'
>>    except URLError:
>>       print 'fail ' + str(count)
>
>Note that you may have good reason for doing it differently:
>
>MAX_ATTEMPTS = 5
>def retry(url):
>    count = 0
>    while True:
>        count += 1
>        try:
>            print 'attempt', count
>            request = urllib2.Request(url, None, headers)
>            response = urllib2.urlopen(request)
>            if response:
>                print 'True response'
                 ^^^^^
Oops, that print should have been a return.

>        except URLError:
>            if count < MAX_ATTEMPTS:
>                time.sleep(5)
>            else:
>                raise
>
>This structure is required in order for the raise to do a proper
>re-raise.

-- 
Aahz (aahz at pythoncraft.com)           <*>         http://www.pythoncraft.com/

"If you think it's expensive to hire a professional to do the job, wait
until you hire an amateur."  --Red Adair



More information about the Python-list mailing list