2010-02-28 2 views
24

neu hier verwenden! Ich bin ein Anfänger in Python, und ich habe durch das Python Cookbook (2nd Edition) gesucht, um zu lernen, wie man Zeichenfolgen und Zeichen verarbeitet.Kann nichtich in Python 3.1

Ich wollte versuchen, eine Zahl in ihr Unicode-Äquivalent zu konvertieren. Also habe ich versucht, die built-in function called 'unichr' verwenden, die nach dem Kochbuch, geht ungefähr so:

>>> print repr(unichr(8224)) 

... und Ausgang:

u'\u2020' 

jedoch der Code fehlgeschlagen. Ich dachte, es hätte etwas mit drucken zu tun (weil Python 3 print() anstelle von print "" verwendet), aber das hat auch nicht geklappt. Ich habe verschiedene Varianten des Codes ausprobiert und es ist immer noch fehlgeschlagen. Endlich tippte ich nur eine einfache Linie:

unichr(10000) 

Zu meiner Überraschung, diese Fehlermeldung gehalten Aufspringen, egal welchen Wert ich in die obige Funktion gesetzt:

NameError: name 'unichr' is not defined 

Was gibt es das Problem? Gibt es ein bestimmtes Modul, das ich importieren soll?

+1

Nur ein Tipp: Sie könnten und sollten die Fehlermeldung direkt nach "der Code fehlgeschlagen." Beachten Sie immer die Fehlermeldung, die Python gibt (und die genaue * Fehlermeldung, nicht aus dem Speicher), und erwähnen Sie es früh. –

+0

Vielen Dank für den Rat, ich werde es auf jeden Fall behalten. – anonnoir

Antwort

39

In Python 3, die Sie gerade chr verwenden:

>>> chr(10000) 
'✐' 
3

Python 3.x keine spezielle Unicode-String-Typ/Klasse hat. Jede Zeichenfolge ist eine Unicode-Zeichenfolge. Also ... ich würde versuchen chr. Sollte Ihnen geben, was unichr vor-3.x getan hat. Kann leider nicht testen.

11

In Python 3 gibt es keinen Unterschied mehr zwischen Unicode und normalen Strings. Nur zwischen Unicode-Strings und Binärdaten. So entfernten die Entwickler schließlich die unichr Funktion zugunsten einer gemeinsamen chr, die jetzt tut, was die alte unichr tat. Siehe Dokumentation here.

+0

Danke. Ich habe versucht, eine ähnliche Frage in diesem Kommentarbereich zu stellen, aber sie wird nicht richtig ausgefüllt, also habe ich sie unten gepostet. (Ich hoffe, dass ich dabei nicht auf die Regeln der Seite gestoßen bin.) – anonnoir

+0

Es gibt immer noch zwei string-ische Typen. Was 2.x "Unicode" nennt, 3.x "str" ​​(mit trivialen Änderungen). Was 2.x "str" ​​aufruft, 3.x nennt "bytes" (mit moderaten Änderungen). –