I often struggle with the problem outlined in part in this thread. I know that I'm going to repeat some of what is said elsewhere but I'd like to present the question all in one place.
I believe that the routines in the Python standard library do not document which exceptions they could raise (I understand some reasons why, but they nontheless do not). So I often find out the hard way that a library call can raise an exception that I was not smart enough to anticipate. So I often find myself doing try: make_a_routine_call(x,y,z) except AnticipatedError, err: do_something_with_it(x,y,z,err) exception Exception, err: print "something crazy happened "+str(err) where the print statement is just supposed to give me some idea of what happened. (I actually usually log it instead of printing it. If there is a better way, I'd love to hear it.) But "str(err)" sometimes fails, as the OP noted. Further, xtr(err) alone is not enough, I believe. I believe that some routines in the standard library do not return strings (by that I mean something approximately like "err.value is a pair"; forgive me, I don't remember the full details). Surely as lovely a language as Python has a better idiom for dealing with exceptions in the standard library than something that works out to print "something crazy happened"+" ".join([xtra(x) for x in err]) ? (I would understand better if it was a user's code; they are free to do what works for them, of course.) But I've been unable to think of one and I haven't seen in this thread another direction. Is there one? Jim -- http://mail.python.org/mailman/listinfo/python-list