Matthew White wrote: > Hello, > >>From a general style and/or programmatic perspective, which is a "better" > way to write this bit of code?
Hmm, neither? > > try: > (dn, attrs) = conn.search_s(search_base, search_scope, search_filter, > search_attrs): > except Exception, e: > warn_the_user(e) > do_something_useful() > > for (name, data) in (dn, attrs): > print '%s' % (name) > for key, value in data.iteritems(): > print '%s => %s' % (key, value) This will run the for loop even if you get an exception. I think the for loop is buggy, too, it is different from the one below. > > OR > > try: > for dn, attrs in conn.search_s(search_base, search_scope, search_filter, > search_attrs): > print dn > for key, value in attrs.iteritems(): > print '\t%s => %s' % (key, value) > print > except Exception, e: > warn_the_user(e) > do_something_useful This might be OK. It will catch exceptions in the for loop, which you may or may not want. If this code is at a low level of your program, it's best to only catch expected exceptions, and let unexpected exceptions propagate to a higher level. At the higher level, you can have a generic except block that reports the error and moves on. This is often in a top-level loop or event handler. Your code has elements of both - code that does real work with a generic except block that reports errors. Anyway here is a construction that is very useful for catching just the exceptions you expect to see from a bit of code, while running the rest of the code outside of the try block. try: (dn, attrs) = conn.search_s(search_base, search_scope, search_filter, search_attrs): except ConnectionError, e: warn_the_user(e) do_something_useful() else: print dn for key, value in attrs.iteritems(): print '\t%s => %s' % (key, value) print The idea is to put as little code as possible in the scope of the try, and to catch as few exceptions as possible. If no exception is raised, the else: block will run. If there is an exception in that code, it will propagate to a higher level. Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor