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