Как проверить, является ли тип переменной строковым? - PullRequest
634 голосов
/ 30 января 2011

Есть ли способ проверить, является ли тип переменной в Python строковым .. как

isinstance(x,int);

для целочисленных значений?

Ответы [ 24 ]

7 голосов
/ 09 августа 2016

Итак,

У вас есть множество вариантов, чтобы проверить, является ли ваша переменная строковой или нет:

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

Этот порядок предназначен для целей.

6 голосов
/ 21 августа 2013

Альтернативный способ для Python 2, без использования basestring:

isinstance(s, (str, unicode))

Но все еще не будет работать в Python 3, поскольку unicode не определено (в Python 3).

5 голосов
/ 09 августа 2016
a = '1000' # also tested for 'abc100', 'a100bc', '100abc'

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

возвращает True

type(a) in [str, unicode]

возвращает True

4 голосов
/ 28 февраля 2017

Вот мой ответ для поддержки как Python 2, так и Python 3 вместе с этими требованиями:

  • Написано в коде Py3 с минимальным кодом сравнения Py2.
  • Позже удалите код сравнения Py2без сбоев.Т.е. стремиться только к удалению, без изменений в коде Py3.
  • Избегать использования six или аналогичного модуля Compat, так как они имеют тенденцию скрывать то, что пытаются достичь.
  • Перспектива дляПотенциал 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)
3 голосов
/ 13 июня 2015

Чтобы проверить, является ли myvar строкой, также можно использовать это:

if type(myvar) == str
2 голосов
/ 01 июня 2014

Если вы не хотите зависеть от внешних библиотек, это работает как для Python 2.7+, так и для 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");
0 голосов
/ 12 июня 2015
varA = "hey"
if type(varA) == str:
   print "it is a string"
0 голосов
/ 25 июля 2014

Вот как я это делаю:

if type(x) == type(str()):
0 голосов
/ 09 августа 2016
s = '123'
issubclass(s.__class__, str)
0 голосов
/ 09 августа 2016

Можно просто использовать функцию isinstance , чтобы убедиться, что входные данные имеют формат string или unicode .Приведенные ниже примеры помогут вам легко понять.

>>> isinstance('my string', str)
True
>>> isinstance(12, str)
False
>>> isinstance('my string', unicode)
False
>>> isinstance(u'my string',  unicode)
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...