Как проверить, является ли тип переменной строкой?

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

isinstance(x,int);

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

Комментарии к вопросу (3)

В Python 2.x вы должны сделать следующее

isinstance(s, basestring)

basestring является абстрактным суперклассом str и unicode. Его можно использовать для проверки того, является ли объект экземпляром str или unicode.


В Python 3.x правильным тестом будет следующий

isinstance(s, str)

Класс bytes не считается строковым типом в Python 3.

Комментарии (6)

Я знаю, это старая тема, но, будучи первым, кто показал в Google и учитывая, что я Дон'т найти удовлетворительных ответов, Я'МР оставлю это здесь для справки:

шесть является Python 2 и 3 библиотеки совместимости, который уже охватывает этот вопрос. Затем вы можете сделать что-то вроде этого:

import six

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

Проверять код, это то, что вы ищите:

import sys

PY3 = sys.version_info[0] == 3

if PY3:
    string_types = str,
else:
    string_types = basestring,
Комментарии (1)

В Python 3.х или Python 2.7.6

if type(x) == str:
Комментарии (3)

вы можете сделать:

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

или:

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

надеюсь, что это помогает!

Комментарии (0)

Модуль типов также существует, если вы проверяете не только ints и strings. http://docs.python.org/library/types.html

Комментарии (2)

с basestring` это't, определяемая в Питон3, эта маленькая хитрость может помочь сделать код совместимым:

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

после этого можно выполнить следующий тест на обоих вместо python2 и Питон3

isinstance(myvar, basestring)
Комментарии (1)

Питон 2 / 3 в том числе 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

Комментарии (1)

Отредактируйте на основе лучшего ответа ниже. Спуститесь примерно на 3 ответа и узнайте о крутости basestring.

Старый ответ: Следите за юникодными строками, которые вы можете получить из нескольких мест, включая все вызовы COM в Windows.

if isinstance(target, str) or isinstance(target, unicode):
Комментарии (4)

Много хороших предложений других здесь, но я не'т видите хороший кросс-платформенный резюме. Следующее должно быть хорошее падение для любой программы на Python:

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)

В этой функции мы используем isinstance(объект, classinfo), чтобы увидеть, если наш вход с ул. `в Python 3 или basestring в Python 2.

Комментарии (4)

Также я хочу заметить, что если вы хотите проверить, является ли тип переменной определенного типа, вы сможете сравнить тип переменной к типу известного объекта.

Для строк можно использовать этот

type(s) == type('')
Комментарии (3)

Так,

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

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

Данный заказ на цели.

Комментарии (0)

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

isinstance(s, (str, unicode))

Но все-таки выиграл'т работать в Python 3, так как Юникод это'определенными т (в Python 3).

Комментарии (0)
a = '1000' # also tested for 'abc100', 'a100bc', '100abc'

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

возвращает true

type(a) in [str, unicode]

возвращает true

Комментарии (1)

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

  • Написано в коде Py3 с минимальными совместимости кода Py2.
  • Удалить код совместимости Py2 позже без срывов. Т. е. целью для удаления всего, никаких изменений в Py3 код.
  • Избегайте использования шесть или подобный модуль совместимости, так как они склонны скрывать от То, что пытается быть достигнуто.
  • Перспективная для потенциального 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)
Комментарии (0)

Если вы не хотите зависеть от внешних библиотек, это работает как для 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)

Вы можете просто использовать isinstance функция, чтобы убедиться, что входные данные в формате строки или Юникод. Ниже примеры помогут вам легко разобраться.

>>> isinstance('my string', str)
True
>>> isinstance(12, str)
False
>>> isinstance('my string', unicode)
False
>>> isinstance(u'my string',  unicode)
True
Комментарии (0)
s = '123'
issubclass(s.__class__, str)
Комментарии (0)

Это, как я делаю это:

if type(x) == type(str()):
Комментарии (2)

Я'видел:

hasattr(s, 'endswith') 
Комментарии (0)
>>> thing = 'foo'
>>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode'
True
Комментарии (1)