Unicode and exception strings
carroll at tjc.com
Wed Jan 14 02:32:36 CET 2004
On 12 Jan 2004 08:41:43 +0100, Rune Froysa <rune.froysa at usit.uio.no>
>Terry Carroll <carroll at tjc.com> writes:
>> On 09 Jan 2004 13:18:39 +0100, Rune Froysa <rune.froysa at usit.uio.no>
>> >Assuming an exception like:
>> > x = ValueError(u'\xf8')
>> >AFAIK the common way to get a string representation of the exception
>> >as a message is to simply cast it to a string: str(x). This will
>> >result in an "UnicodeError: ASCII encoding error: ordinal not in
>> >The common way to fix this is with something like
>> >u'\xf8'.encode("ascii", 'replace'). However I can't find any way to
>> >tell ValueErrors __str__ method which encoding to use.
>> Rune, I'm not understanding what your problem is.
>> Is there any reason you're not using, for example, just repr(u'\xf8')?
>The problem is that I have little control over the message string that
>is passed to ValueError(). All my program knows is that it has caught
>one such error, and that its message string is in unicode format. I
>need to access the message string (for logging etc.).
>> _display_text = _display_text + "%s\n" % line.decode('utf-8'))
>This does not work, as I'm unable to get at the 'line', which is
>stored internally in the ValueError class (and generated by its __str_
You should be able to get at it via x.args:
>>> x = ValueError(u'\xf8')
The only thing is, what to do with it once you get there. I don't think
0xF8 is a valid unicode encoding on its own. IIRC, it's part of a
You can try to extract it as above, and then decode it with the codecs
module, but if it's only the first byte, it won't decode correctly:
>>> import codecs
>>> d = codecs.getdecoder('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'builtin_function_or_method' object has no attribute
But, still, if all you want is to have *something* to print out explaining
the exception, you can use repr():
Is this helping any, or am I just flailing around?
More information about the Python-list