Bagaimana untuk memeriksa apakah tipe dari suatu variabel string?

Apakah ada cara untuk memeriksa apakah tipe dari suatu variabel dalam python adalah string. seperti:

isinstance(x,int);

untuk nilai integer?

Mengomentari pertanyaan (3)

Di Python 2.x, anda akan melakukan

isinstance(s, basestring)

basestring adalah abstract superclass dari str dan unicode. Hal ini dapat digunakan untuk menguji apakah sebuah objek adalah instance dari str atau unicode.


Di Python 3.x, uji yang benar adalah

isinstance(s, str)

The byte kelas isn't dianggap sebagai tipe string di Python 3.

Komentar (6)

Saya tahu ini adalah topik lama, tapi menjadi orang pertama yang ditampilkan di google dan mengingat bahwa saya don't menemukan jawaban yang memuaskan, saya'akan meninggalkan ini di sini untuk referensi di masa mendatang:

enam adalah Python 2 dan 3 perpustakaan kompatibilitas yang sudah mencakup masalah ini. Anda kemudian dapat melakukan sesuatu seperti ini:

import six

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

Memeriksa kode, ini adalah apa yang anda dapatkan:

import sys

PY3 = sys.version_info[0] == 3

if PY3:
    string_types = str,
else:
    string_types = basestring,
Komentar (1)

Di Python 3.x atau Python 2.7.6

if type(x) == str:
Komentar (3)

yang dapat anda lakukan:

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

atau:

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

harap ini membantu!

Komentar (0)

Jenis modul juga ada jika anda memeriksa lebih dari int dan string. http://docs.python.org/library/types.html

Komentar (2)

sejak basestring isn't didefinisikan dalam Python3, trik kecil ini mungkin bisa membantu untuk membuat kode yang kompatibel:

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

setelah itu anda dapat menjalankan tes berikut di kedua Python2 dan Python3

isinstance(myvar, basestring)
Komentar (1)

Python 2 / 3 termasuk 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

Komentar (1)

Edit berdasarkan jawaban yang lebih baik di bawah ini. Turun sekitar 3 jawaban dan mencari tahu tentang kesejukan basestring.

Tua menjawab: Watch out untuk unicode string, yang bisa anda dapatkan dari beberapa tempat, termasuk semua panggilan COM di Windows.

if isinstance(target, str) or isinstance(target, unicode):
Komentar (4)

Banyak saran yang baik yang diberikan oleh orang lain di sini, tapi aku don't melihat sebuah cross-platform ringkasan. Berikut ini harus baik drop in untuk setiap program 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)

Dalam fungsi ini, kita menggunakan isinstance(objek, classinfo) untuk melihat apakah kita input adalah str di Python 3 atau basestring di Python 2.

Komentar (4)

Juga saya ingin melihat bahwa jika anda ingin memeriksa apakah tipe dari suatu variabel merupakan jenis tertentu, anda dapat membandingkan jenis variabel untuk jenis objek yang dikenal.

Untuk string anda dapat menggunakan ini

type(s) == type('')
Komentar (3)

Jadi,

Anda memiliki banyak pilihan untuk memeriksa apakah variabel string atau tidak:

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

Perintah ini adalah untuk tujuan.

Komentar (0)

Cara alternatif untuk Python 2, tanpa menggunakan basestring:

isinstance(s, (str, unicode))

Tapi masih menang't bekerja di Python 3 sejak unicode isn't didefinisikan (dalam Python 3).

Komentar (0)
a = '1000' # also tested for 'abc100', 'a100bc', '100abc'

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

mengembalikan True

type(a) in [str, unicode]

mengembalikan True

Komentar (1)

Berikut ini adalah jawaban saya untuk mendukung Python 2 dan Python 3 bersama dengan persyaratan:

  • Ditulis dalam Py3 kode dengan minimal Py2 compat kode.
  • Menghapus Py2 compat kode kemudian tanpa gangguan. I. e. bertujuan untuk dihapus saja, tidak ada modifikasi untuk Py3 kode.
  • Hindari menggunakan enam atau mirip compat modul karena mereka cenderung menyembunyikan diri apa mencoba untuk dicapai.
  • Masa depan-bukti untuk potensi 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)
Komentar (0)

Jika anda tidak ingin tergantung pada eksternal libs, ini bekerja baik untuk Python 2.7+ dan 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");
Komentar (0)

Anda hanya dapat menggunakan isinstance fungsi untuk memastikan bahwa input data dari format string atau unicode. Di bawah ini contoh-contoh yang akan membantu anda untuk memahami dengan mudah.

>>> isinstance('my string', str)
True
>>> isinstance(12, str)
False
>>> isinstance('my string', unicode)
False
>>> isinstance(u'my string',  unicode)
True
Komentar (0)
s = '123'
issubclass(s.__class__, str)
Komentar (0)

Ini adalah bagaimana saya melakukannya:

if type(x) == type(str()):
Komentar (2)

I've melihat:

hasattr(s, 'endswith') 
Komentar (0)
>>> thing = 'foo'
>>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode'
True
Komentar (1)