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

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

isinstance(x,int);

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

Ответы [ 24 ]

935 голосов
/ 30 января 2011

В Python 2.x вы бы сделали

isinstance(s, basestring)

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


В Python 3.x правильный тест -

isinstance(s, str)

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

211 голосов
/ 16 декабря 2013

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

six - это библиотека совместимости 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,
44 голосов
/ 09 ноября 2014

В Python 3.x или Python 2.7.6

if type(x) == str:
15 голосов
/ 07 августа 2016

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

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')

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

14 голосов
/ 31 января 2011

Модуль типа также существует, если вы проверяете больше, чем целые и строки. http://docs.python.org/library/types.html

11 голосов
/ 20 ноября 2012

Редактировать на основе лучшего ответа ниже.Пройдите около 3-х ответов и узнайте о крутости базовой строки.

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

9 голосов
/ 02 июня 2015

Python 2/3, включая Юникод

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 голосов
/ 17 сентября 2015

, поскольку basestring не определено в Python3, этот маленький трюк может помочь сделать код совместимым:

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

после этого вы можете запустить следующий тест на Python2 и Python3

isinstance(myvar, basestring)
8 голосов
/ 10 марта 2016

Здесь много хороших предложений от других, но я не вижу хорошего кроссплатформенного резюме.Следующее должно быть хорошим дополнением для любой программы 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(object, classinfo), чтобы увидеть, является ли наш ввод str в Python 3 или basestring вPython 2.

8 голосов
/ 19 октября 2013

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

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

type(s) == type('')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...