Kent Johnson wrote: > Tim Hochberg wrote: > >>Kent Johnson wrote: >> >>>David Bear wrote: >>> >>> >>>>I'm attempting to use the cgi module with code like this: >>>> >>>>import cgi >>>>fo = cgi.FieldStorage() >>>># form field names are in the form if 'name:part' >>>>keys = fo.keys() >>>>for i in keys: >>>> try: >>>> item,value=i.split(':') >>>> except NameError, UnboundLocalError: >>>> print "exception..." >>>> item,value=(None,None) >>>>return(item,value) >>>> >>>>However, the except block does not seem to catch the exception and an >>>>unboundlocalerror is thrown anyway. What am I missing? >>>> >>> >>>I don't know why you would get an UnboundLocalError from the above code, >>>but the correct syntax is >>> except (NameError, UnboundLocalError): >> >>One possibility is that there are no keys. Then the loop finishes >>without ever setting item or values. This would give an unbound local >>error. I assume that the OP would have noticed that in the traceback, >>but perhaps he missed it. > > > I think that would be a NameError for the code shown because item and > value are global variables.
Note that there is a return at the end of the posted code, so I suspect that this problem actually occurs in a function somewhere and the OP "simplified" things in order to post it. But anyway you raise a good point that > perhaps the reason the exception is not being caught is because it is > raised by code outside the scope of the try. > > Also UnboundLocalError is a subclass of NameError so catching NameError > should catch UnboundLocalError as well. Good point. -tim -- http://mail.python.org/mailman/listinfo/python-list