Thank you for the reply. It happens that, as I understand it, none of the options that you mentioned is a solution for my situation.
On Jan 29, 9:48 pm, Steven D'Aprano <[EMAIL PROTECTED]> wrote: > The easiest ways to fix that are: > > (1) subclass an exception that already knows about Unicode; But I often raise one of Python's built-in errors. And also, is it really true that subclassing one of Python's built-ins give me something that is unicode deficient? I assumed that I had missed something (because that's happened so many times before :-) ). For instance, I write a lot of CGI and I want to wrap everything in a try .. except. try: main() except Exception, err: print "Terrible blunder: ",str(err) so that the err can be one of my exceptions, or can be one that came with Python. (And, that I can see, err.args can be either the relevant string or a tuple containing the relevant string and the documentation is silent on whether in the built-in exceptions if err.args is a tuple then the string is guaranteed to be first in the tuple.) > (2) convert the file name to ASCII before you store it; or I need the non-ascii information, though, which is why I included it in the error message. > (3) add a __str__ method to your exception that is Unicode aware. I have two difficulties with this: (1) as above I often raise Python's built-in exceptions and for those __str__() is what it is, and (2) this goes against the meaning of __str__() that I find in the documentation in ref/customization.html which says that the return value must be a string object. Obviously no one will come to my house and slap me if I violate that, but I'll venture that it would be odd if the best practice were to be to do the opposite of the documentation. > I'm going to be lazy and do a real simple-minded version of (2): > > >>> class MyBetterException(Exception):... def __init__(self, arg): > ... self.args = arg.encode('ascii', 'replace') > ... self.unicode_arg = arg # save the original in case This is illuminating. How do you know that for exceptions __init__() should take one non-self argument? I missed finding this information. Thanks again, Jim -- http://mail.python.org/mailman/listinfo/python-list