Be careful with the exceptions you catch
Robert Olson
olson at mcs.anl.gov
Wed Feb 5 10:43:18 CST 2003
This code:
uri = self.profile.homeVenue
try:
self.client = Client.Handle(venueUri).get_proxy()
self.EnterVenue(venueUri)
except: # the address is incorrect
# open a dialog and connect that way
connectToVenueDialog = ConnectToVenueDialog(NULL, -1, 'Connect
to server')
if (connectToVenueDialog.ShowModal() == wxID_OK):
uri = connectToVenueDialog.address.GetValue()
is broken in a couple of ways.
First, it will always require one to enter an address. The problem is that
the exception that was caught was
exceptions.UnboundLocalError local variable 'venueUri' referenced before
assignment
The unqualified except catches everything - syntax errors, missing names, etc.
Second, EnterVenue is also wrapped in an unqualified try:except: block, and
hence catches the GSITCPIOException that is what the calling code is
looking for. If we are going to use exception handing in the upper levels
to snag exceptions raised by the lower, and depend on lower level code
raising exceptions for proper behavior, the exceptions need to be either
not caught on the lower level or re-raised properly.
The following change to the except clause in VenueClient.EnterVenue causes
the proper behavior to be seen:
except IOException, e:
print "Exception in EnterVenue : ", sys.exc_type, sys.exc_value
raise e
IOException is a new symbol imported from AccessGrid.hosting.pyGlobus; it
is a renaming of pyGlobus.io.IOBaseException.
-bob
More information about the ag-dev
mailing list