TypeError:字符映射必须返回整数,None或unicode

时间:2017-06-21 14:21:19

标签: python unicode typeerror python-unicode

我无法弄清楚这个错误是什么以及我该如何修复它。

    texts = [[word for word in document.translate(trans_table).lower().split()] for document in live_text]

TypeError: character mapping must return integer, None or unicode

我的代码:

rows=cursor.fetchall()
listTSeps=[]

for row in rows:
    listTSeps.append(re.sub('[^A-Za-z0-9]+', ' ', row[0]))

#Close cursor and connection done reading from database
cursor.close()
conn.close()


live_text=listTSeps
trans_table = ''.join( [chr(i) for i in range(128)] + [' '] * 128 )

texts = [[word for word in document.translate(trans_table).lower().split()] for document in live_text]

text_matrix = ["None"]*len(live_text)

我通过网络搜索得出结论,这可以使用.encode('ascii')或ord()来解决。

我是python的业余爱好者并试图从示例代码中学习。我是从朋友那里得到的。请有人能够解释问题的根源以及如何解决问题。感谢。

1 个答案:

答案 0 :(得分:1)

您的documentunicode,而不是str。对于unicodetranslate()方法需要是不同的,而不是256个字符的字符串。

help(u' '.translate)

的产率:

Help on built-in function translate:

translate(...)
    S.translate(table) -> unicode

    Return a copy of the string S, where all characters have been mapped
    through the given translation table, which must be a mapping of
    Unicode ordinals to Unicode ordinals, Unicode strings or None.
    Unmapped characters are left untouched. Characters mapped to None
    are deleted.

这样的字典很好:

u'abcd efgh'.translate({ 32: u'x' })
u'abcdxefgh'

对于您只想用空格替换ASCII 127以上的所有字符的情况,您可能需要考虑这一点:

re.sub(r'[^\x00-\x7f]', ' ', u'abcdäefgh')
u'abcd efgh'