[merge] Unicode Exception fixes
John Arbash Meinel
john at arbash-meinel.com
Mon Aug 21 21:22:09 BST 2006
Aaron Bentley wrote:
> John Arbash Meinel wrote:
>>> There are a few bugs listed, which occur because of how we raise errors
>>> with Unicode strings.
>>> - cmd = str(argv.pop(0))
>>> + cmd = argv.pop(0)
>>> + try:
>>> + cmd = cmd.encode('ascii')
>>> + except UnicodeError:
>>> + raise errors.UnicodeCommand(cmd)
> Do we actually want a specific error here? I would think we should
> continue, and let get_cmd_object raise "unknown command" as usual. No
> need to complain about the fact that it's unicode; the fact that it's
> unknown is enough.
I could go either way. But raising an explicit error helps people
realize that we don't support unicode command names.
This could also be done on the register_command() side.
At the very least this gives a nicer traceback.
>>> --- bzrlib/errors.py
>>> +++ bzrlib/errors.py
>>> @@ -126,7 +126,12 @@
>>> def __str__(self):
>>> - return self.__doc__ % self.__dict__
>>> + # __str__() should always return a 'str' object
>>> + # never a 'unicode' object.
>>> + s = self.__doc__ % self.__dict__
>>> + if isinstance(s, unicode):
>>> + return s.encode('utf8')
>>> + return s
>>> except (NameError, ValueError, KeyError), e:
>>> return 'Unprintable exception %s: %s' \
>>> % (self.__class__.__name__, str(e))
> I think this is going too far; a string may be unicode while still being
> convertible-to-ascii. In any case, we may well be able to print errors
> in unicode, which would be preferable.
> How about:
You forget that utf-8 is a strict superset of ascii. All ascii
characters are unchanged in utf-8. So your proposal actually always
gives the same result, only you have to catch yet another exception.
s.encode('ascii') == s.encode('utf8') will always be true unless the
first one raises a UnicodeError.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 254 bytes
Desc: OpenPGP digital signature
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20060821/c9ce7d04/attachment.pgp
More information about the bazaar