Subject: [Tutor] Re: Tutor Testing for response from a Web site
charlie@begeistert.org
charlie@begeistert.org
Thu Apr 10 03:49:28 2003
Henry,
I'm keeping this on the list where the real gurus are as there rarely to be
found here ;-) Okay, MAL is coming round today but that's mere coincidence!
On 2003-04-10 at 06:11:35 [+0200], you wrote:
> Charlie:
>
> Thanks for responding.
>
> I just wanted to know how to test for a connection that cannot for one
> reason or another, be made with a server.
>
> >From your response, I checked into the "IOError." I am not sure
> about how to use these, but from some examples in some Python books I
> have, here are some questions I hope you can answer for me:
>
> 1) Is the following code ok now in order to catch the no connection
> possibility?
> 2) After the IOError exception, I also included another exception that
> as you said, catches every possible error. Is this correct too the
> way I coded this after the other exception?
well, you don't need to print "unknown error" you can actually get all the
information from the traceback. Try print sys.exc_info() instead. I still
don't see the need to carry on execution with other errors as your script
probably isn't doing what you want.
> 3) Can this code be written so that I only need to have ONE
> f_object.close() statement if any exception occurs? As it stands
> now, I have to repeat it for each exception.
Yes, you just add a finally: f_object.close() at the end.
> 4) Is there some built in time limit, say one minute, in which Python
> tries to connect to a server before giving up and calling the
> exception? If so, can one regulate how long Python waits before
> giving up and calling the exception, and can one regulate how many
> times Python tries to connect? I could put things in a loop to do
> that I guess.
Yes, I think urllib.urlopen() has a two minute timeout. You might be able
to set this yourself. This is from the docs for urlilib2:
urlopen(url, data=None) -- basic usage is that same as original urllib.
pass the url and optionally data to post to an HTTP URL, and get a
file-like object back. One difference is that you can also pass a Request
instance instead of URL. Raises a URLError (subclass of IOError); for HTTP
errors, raises an HTTPError, which can also be treated as a valid response.
This basically means you can get more useful error messages.
import urllib, sys
metURL = "http://isl715.nws.noaa.gov/tdl/forecast/tdl_etamet.txt"
# f_object = open("c:\\python_pgms\\plot_guidance\\met_data.txt", 'w')
f_object = open("c:/python_pgms/plot_guidance/met_data.txt", "w")
# this is easier to read and more portable
try:
# print "\nBEGIN DOWNLOADING ETA (MET) MOS"
print "BEGIN DOWNLOADING ETA (MET) MOS"
# this is Python so we don't need more \n than absolutely necessary
metall = urllib.urlopen(metURL).read()
f_object.write(metall)
except IOError:
print "Server connection could not be made."
except:
print "Something has gone wrong"
print sys.exc_info()
finally:
f_object.close()
>Thanks much for your help!
>
> Henry Steigerwaldt
> Hermitage, TN
> Email: hsteiger@comcast.net
Charlie