2016-05-26 3 views
-1

Es ist zum Entfernen von Satzzeichen von str.TypeError: erwartet ein Zeichenpufferobjekt Beim Ausführen einer Übersetzungsfunktion

tbl = dict.fromkeys(i for i in xrange(sys.maxunicode) 
         if unicodedata.category(unichr(i)).startswith('P')) 
def remove_punctuation(text): 
    return text.translate(tbl) 

remove_punctuation(',') 

Aber es zeigt die Fehlermeldung, wenn ich den Code ausführen:

Traceback (most recent call last): 
    File "C:/Users/user/PycharmProjects/untitled2/is_include.py", line 22, in <module> 
    remove_punctuation('') 
    File "C:/Users/user/PycharmProjects/untitled2/is_include.py", line 20, in remove_punctuation 
    return text.translate(tbl) 
TypeError: expected a character buffer object 
+1

Verwenden Sie Python 2 oder 3? – qvpham

+1

Welche Python-Version verwenden Sie? In Python 2.x ist '',' 'vom Typ' str ', nicht' unicode 'und' str.translate() 'hat einen anderen Prototyp als' unicode.translate() '. Was ist das Ergebnis von 'remove_punctuation (u ',')'? –

+0

OP verwendet 'xrange' und' unichr', also Python 2. –

Antwort

-1

text.translate() ist eine Zeichenfolge erwartet. Stellen Sie sicher, dass Sie zuerst tbl in einen String konvertieren.

def remove_punctuation(text): 
    return text.translate(str(tbl)) 

UPDATE:

Oder, wie Sven Marnach in der Kommentar Antwort erwähnt, können Sie stattdessen ein Unicode-translate verwenden.

remove_punctuation(u',')

Verwandte Themen