What to do if Python says “character mapping must return integer, None or unicode”

2008-06-16 19:14:13 UTC

So you’re using the unicode class’s translate method, and it says:

TypeError: character mapping must return integer, None or unicode

You may be wondering what causes this. After all, you’re duly using the string.maketrans function. Surely this should be valid?

Well, no: You can only use string.maketrans with str.translate. For unicode.translate, you must use a different kind of translation table:

… a mapping of Unicode ordinals to Unicode ordinals [int], Unicode strings [unicode] or None.

3.6.1 String Methods

In Localization Helper, I had to replace my string.maketrans call with this code:

dict(zip(map(ord, u'\a\b\t\n\v\f\r'), u'abtnvfr'))

Note that I need to call ord on each key character, because keys must be ints.

Leave a Reply

Do not delete the second sentence.