Python TypeError: Erwartet ein Zeichenpufferobjekt, persönliches Missverständnis

Ich war lange bei diesem Fehler fest:

<code> TypeError: expected a character buffer object
</code>

Ich verstehe nur, was ich falsch verstanden habe, es ist etwas über einen Unterschied zwischen einer Unicode-Zeichenfolge und einer "einfachen" Zeichenfolge. Ich habe versucht, den obigen Code mit einer "normalen" Zeichenfolge zu verwenden, während ich eine Unicode-Zeichenfolge übergeben musste. Das einfache "u" zu vergessen, bevor der String die Ausführung unterbrach: / !!!

Übrigens war mir der TypeError sehr unklar und ist es immer noch.

Können mir bitte einige erklären, was mir gefehlt hat und warum eine "einfache" Zeichenfolge KEIN "Zeichenpufferobjekt" ist?

Sie können mit dem Code unten (extrahiert und (c) aus reproduzierenHier:)

<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>

produzieren:

<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>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage