506 Stimmen

Wie findet man heraus, ob ein Python-Objekt eine Zeichenkette ist?

Wie kann ich überprüfen, ob ein Python-Objekt eine Zeichenkette ist (entweder regulär oder Unicode)?

17voto

clacke Punkte 7178

Wenn man die explizite Typüberprüfung vermeiden will (und es gibt sind gute Gründe, sich davon fernzuhalten), ist wahrscheinlich der sicherste zu prüfende Teil des String-Protokolls:

str(maybe_string) == maybe_string

Es wird nicht durch eine Iterable oder einen Iterator iterieren, es wird eine Liste von Zeichenketten nicht als String bezeichnen und es erkennt korrekt eine stringartig als Zeichenkette.

Natürlich gibt es auch Nachteile. Zum Beispiel, str(maybe_string) kann eine schwere Berechnung sein. Wie so oft, lautet die Antwort es kommt darauf an .

EDIT: Da @Tcll weist darauf hin in den Kommentaren, fragt die Frage eigentlich nach einer Möglichkeit, sowohl Unicode-Strings als auch Bytestrings zu erkennen. Unter Python 2 wird diese Antwort mit einer Ausnahme für Unicode-Strings, die Nicht-ASCII-Zeichen enthalten, fehlschlagen, und unter Python 3 wird sie Folgendes zurückgeben False für alle Bytestrings.

13voto

Abraam Georgiadis Punkte 139

Um zu überprüfen, ob Ihre Variable etwas ist, könnten Sie so vorgehen:

s='Hello World'
if isinstance(s,str):
#do something here,

Die Ausgabe von isistance liefert Ihnen einen booleschen Wert True oder False, so dass Sie entsprechend anpassen können. Sie können das erwartete Akronym Ihres Wertes überprüfen, indem Sie zunächst verwenden: type(s) Dies gibt Ihnen den Typ 'str' zurück, so dass Sie ihn in der Funktion isistance verwenden können.

13voto

Grasshopper Punkte 179

Es ist ganz einfach: Verwenden Sie den folgenden Code (wir gehen davon aus, dass es sich bei dem genannten Objekt um obj handelt)-

if type(obj) == str:
    print('It is a string')
else:
    print('It is not a string.')

5voto

Ich werde das vielleicht im Stil der Enten-Typisierung angehen, wie andere erwähnt haben. Woher weiß ich, dass ein String wirklich ein String ist? Konvertierung zu einer Zeichenkette!

def myfunc(word):
    word = unicode(word)
    ...

Wenn das Argument bereits ein String oder Unicode-Typ ist, behält real_word seinen Wert unverändert bei. Implementiert das übergebene Objekt eine __unicode__ Methode, die verwendet wird, um die Unicode-Darstellung zu erhalten. Wenn das übergebene Objekt nicht als String verwendet werden kann, wird die unicode löst eine Ausnahme aus.

4voto

beepbeep Punkte 41
isinstance(your_object, basestring)

wird True sein, wenn Ihr Objekt tatsächlich ein String-Typ ist. str' ist ein reserviertes Wort.

Ich bitte um Entschuldigung, die richtige Antwort ist die Verwendung von "basestring" anstelle von "str", um auch Unicode-Strings einzuschließen - wie bereits von einem der anderen Teilnehmer angemerkt wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X