it-swarm.com.de

Wie prüfe ich, ob der Typ einer Variablen ein String ist?

Gibt es eine Möglichkeit zu überprüfen, ob der Typ einer Variablen in Python string ist

isinstance(x,int);

für ganzzahlige Werte?

567
c_pleaseUpvote

In Python 2.x würden Sie das tun

isinstance(s, basestring)

basestring ist die abstrakte Oberklasse von str und unicode. Damit kann geprüft werden, ob ein Objekt eine Instanz von str oder unicode ist.


In Python 3.x ist der korrekte Test

isinstance(s, str)

Die bytes-Klasse wird in Python 3 nicht als String-Typ betrachtet.

849
Sven Marnach

Ich weiß, dass dies ein altes Thema ist, aber da es das erste ist, das bei Google gezeigt wird, und da ich keine der Antworten als zufriedenstellend empfinde, lasse ich dies hier zum Nachschlagen:

six ist eine Python 2- und 3-Kompatibilitätsbibliothek, die dieses Problem bereits behandelt. Sie können dann so etwas tun:

import six

if isinstance(value, six.string_types):
    pass # It's a string !!

Beim Überprüfen des Codes finden Sie Folgendes:

import sys

PY3 = sys.version_info[0] == 3

if PY3:
    string_types = str,
else:
    string_types = basestring,
203
André Fratelli

In Python 3.x oder Python 2.7.6

if type(x) == str:
39
Texom512

Das Typmodul ist auch vorhanden, wenn Sie mehr als Ints und Strings prüfen. http://docs.python.org/library/types.html

14
dicato

du kannst tun:

var = 1
if type(var) == int:
   print('your variable is an integer')

oder:

var2 = 'this is variable #2'
if type(var2) == str:
    print('your variable is a string')
else:
    print('your variable IS NOT a string')

hoffe das hilft!

11
F. Taylor

Bearbeiten Sie basierend auf einer besseren Antwort unten. Gehen Sie etwa 3 Antworten nach unten und informieren Sie sich über die Coolness des Basisstreifens.

Alte Antwort: Achten Sie auf Unicode-Zeichenfolgen, die Sie an verschiedenen Stellen erhalten können, einschließlich aller COM-Aufrufe in Windows.

if isinstance(target, str) or isinstance(target, unicode):
10
Wade Hatler

Python 2/3 einschließlich Unicode

from __future__ import unicode_literals
from builtins import str  #  pip install future
isinstance('asdf', str)   #  True
isinstance(u'asdf', str)  #  True

http://python-future.org/overview.html

9
crizCraig

da basestring nicht in Python3 definiert ist, kann dieser kleine Trick helfen, den Code kompatibel zu machen:

try: # check whether python knows about 'basestring'
   basestring
except NameError: # no, it doesn't (it's Python3); use 'str' instead
   basestring=str

danach können Sie den folgenden Test auf Python2 und Python3 ausführen

isinstance(myvar, basestring)
9
umläute

Viele gute Vorschläge von anderen hier, aber ich sehe keine gute plattformübergreifende Zusammenfassung. Folgendes sollte für jedes Python-Programm eine gute Wahl sein:

def isstring(s):
    # if we use Python 3
    if (sys.version_info[0] >= 3):
        return isinstance(s, str)
    # we use Python 2
    return isinstance(s, basestring)

In dieser Funktion verwenden wir isinstance(object, classinfo), um festzustellen, ob unsere Eingabe eine str in Python 3 oder eine basestring in Python 2 ist.

8
duanev

Ich möchte auch beachten, dass Sie den Typ der Variablen mit dem Typ eines bekannten Objekts vergleichen können, wenn Sie prüfen möchten, ob der Typ einer Variablen eine bestimmte Art ist.

Für String können Sie dies verwenden

type(s) == type('')
8
Daniil Grankin

So,

Sie haben viele Möglichkeiten zu prüfen, ob Ihre Variable eine Zeichenfolge ist oder nicht:

a = "my string"
type(a) == str # first 
a.__class__ == str # second
isinstance(a, str) # third
str(a) == a # forth
type(a) == type('') # fifth

Diese Reihenfolge ist zweckgebunden. 

6
PatNowak
a = '1000' # also tested for 'abc100', 'a100bc', '100abc'

isinstance(a, str) or isinstance(a, unicode)

gibt True zurück

type(a) in [str, unicode]

gibt True zurück

5
be_good_do_good

Alternative für Python 2, ohne Basisring zu verwenden:

isinstance(s, (str, unicode))

Funktioniert jedoch in Python 3 noch nicht, da unicode nicht definiert ist (in Python 3).

5
yprez

Hier ist meine Antwort, um sowohl Python 2 als auch Python 3 zusammen mit diesen Anforderungen zu unterstützen:

  • Geschrieben in Py3-Code mit minimalem Py2-kompatiblem Code.
  • Entfernen Sie den Py2-kompatiblen Code später ohne Unterbrechung. Das heißt nur zum Löschen, keine Änderung des Py3-Codes.
  • Vermeiden Sie die Verwendung von six oder eines ähnlichen kompatiblen Moduls, da diese dazu neigen, das zu verdecken, was versucht wird.
  • Zukunftssicher für ein potenzielles Py4.

import sys
PY2 = sys.version_info.major == 2

# Check if string (lenient for byte-strings on Py2):
isinstance('abc', basestring if PY2 else str)

# Check if strictly a string (unicode-string):
isinstance('abc', unicode if PY2 else str)

# Check if either string (unicode-string) or byte-string:
isinstance('abc', basestring if PY2 else (str, bytes))

# Check for byte-string (Py3 and Py2.7):
isinstance('abc', bytes)
4
Cas

Um zu testen, ob myvar eine Zeichenfolge ist, können Sie auch Folgendes verwenden:

if type(myvar) == str
3
Ping

Wenn Sie sich nicht auf externe Bibliotheken verlassen wollen, funktioniert dies sowohl für Python 2.7+ als auch für Python 3 ( http://ideone.com/uB4Kdc ):

# your code goes here
s = ["test"];
#s = "test";
isString = False;

if(isinstance(s, str)):
    isString = True;
try:
    if(isinstance(s, basestring)):
        isString = True;
except NameError:
    pass;

if(isString):
    print("String");
else:
    print("Not String");
1
mPrinC

Um den Typ einer Variablen in Python zu überprüfen, können Sie den Typ function ..__ verwenden, z. type('hello'), die Ausgabe str gibt

0
Hetal Rachh

Sie können einfach die Funktion isinstance verwenden, um sicherzustellen, dass die Eingabedaten das Format string oder unicode haben. Die folgenden Beispiele helfen Ihnen, sich leicht zu verstehen.

>>> isinstance('my string', str)
True
>>> isinstance(12, str)
False
>>> isinstance('my string', unicode)
False
>>> isinstance(u'my string',  unicode)
True
0
Hassan Mehmood