Python TypeError: ожидал символьный буферный объект, личное недопонимание
я застрял в этой ошибке в течение длительного времени:
<code> TypeError: expected a character buffer object </code>
я просто понимаю, что неправильно понял, это что-то вроде разницы между строкой Unicode и «простой». Строка, я пытался использовать приведенный выше код с & quot; нормальным & quot; Строка, в то время как я должен был передать один Unicode. Так что, подделывая простое «и» перед тем как строка прервала выполнение: / !!!
Кстати, TypeError была очень неясна для меня, и до сих пор.
пожалуйста, можете ли некоторые объяснить мне, что я пропустил и почему "просто" строка НЕ является «объектом буфера символов» ?
Вы можете воспроизвести с кодом ниже (извлечено и (с) изВот: )
<code>def maketransU(s1, s2, todel=u""): """Build translation table for use with unicode.translate(). :param s1: string of characters to replace. :type s1: unicode :param s2: string of replacement characters (same order as in s1). :type s2: unicode :param todel: string of characters to remove. :type todel: unicode :return: translation table with character code -> character code. :rtype: dict """ # We go unicode internally - ensure callers are ok with that. assert (isinstance(s1,unicode)) assert (isinstance(s2,unicode)) trans_tab = dict( zip( map(ord, s1), map(ord, s2) ) ) trans_tab.update( (ord(c),None) for c in todel ) return trans_tab #BlankToSpace_table = string.maketrans (u"\r\n\t\v\f",u" ") BlankToSpace_table = maketransU (u"\r\n\t\v\f",u" ") def BlankToSpace(text) : """Replace blanks characters by realspaces. May be good to prepare for regular expressions & Co based on whitespaces. :param text: the text to clean from blanks. :type text: string :return: List of parts in their apparition order. :rtype: [ string ] """ print text, type(text), len(text) try: out = text.translate(BlankToSpace_table) except TypeError, e: raise return out # for SO : the code below is just to reproduce what i did not understand dummy = "Hello,\n, this is a \t dummy test!" for s in (unicode(dummy), dummy): print repr(s) print repr(BlankToSpace(s)) </code>
производя:
<code>u'Hello,\n, this is a \t dummy test!' Hello, , this is a dummy test! <type 'unicode'> 32 u'Hello, , this is a dummy test!' 'Hello,\n, this is a \t dummy test!' Hello, , this is a dummy test! <type 'str'> 32 Traceback (most recent call last): File "C:/treetaggerwrapper.error.py", line 44, in <module> print repr(BlankToSpace(s)) File "C:/treetaggerwrapper.error.py", line 36, in BlankToSpace out = text.translate(BlankToSpace_table) TypeError: expected a character buffer object </code>