Apakah ada cara untuk memeriksa apakah jenis variabel dalam python adalah string
, seperti:
isinstance(x,int);
untuk nilai integer?
isinstance(True, int) is True
.
isinstance(x,str)
benar dalam Python 3 (str adalah tipe dasar).
Apakah ada cara untuk memeriksa apakah jenis variabel dalam python adalah string
, seperti:
isinstance(x,int);
untuk nilai integer?
isinstance(True, int) is True
.
isinstance(x,str)
benar dalam Python 3 (str adalah tipe dasar).
Jawaban:
Dalam Python 2.x, Anda akan melakukannya
isinstance(s, basestring)
basestring
adalah superclass abstrak dari str
dan unicode
. Ini dapat digunakan untuk menguji apakah suatu objek adalah turunan dari str
atau unicode
.
Dalam Python 3.x, tes yang benar adalah
isinstance(s, str)
The bytes
kelas tidak dianggap sebagai tipe string di Python 3.
unicode
objek, yang juga harus dianggap sebagai string. Baik tipe str
dan tipe unicode
memiliki kelas dasar umum basestring
, dan ini adalah apa yang ingin Anda periksa.
basestring = str
.
unicode
dalam Python 3. Rekomendasi saya untuk kompatibilitas antara Python 2 dan 3 adalah dengan menggunakan pustaka "enam". (Khususnya isintance(s, six.string_types)
dalam hal ini)
Saya tahu ini adalah topik lama, tetapi menjadi yang pertama ditampilkan di google dan mengingat bahwa saya tidak menemukan jawaban yang memuaskan, saya akan meninggalkan ini di sini untuk referensi di masa mendatang:
six adalah pustaka kompatibilitas Python 2 dan 3 yang sudah membahas masalah ini. Anda kemudian dapat melakukan sesuatu seperti ini:
import six
if isinstance(value, six.string_types):
pass # It's a string !!
Memeriksa kode, inilah yang Anda temukan:
import sys
PY3 = sys.version_info[0] == 3
if PY3:
string_types = str,
else:
string_types = basestring,
value_is_string = isinstance(value, str if sys.version_info[0] >= 3 else basestring)
mana >=
mengasumsikan setiap Python 4+ akhirnya membuat str
kelas root untuk string.
Dalam Python 3.x atau Python 2.7.6
if type(x) == str:
==
secara eksplisit tidak disarankan oleh PEP8, dan memiliki beberapa kelemahan selain dianggap "tidak otomatis", misalnya tidak mendeteksi turunan dari subkelas str
, yang juga harus dianggap sebagai string. Jika Anda benar-benar ingin memeriksa dengan tepat jenis str
dan secara eksplisit mengecualikan subclass, gunakan type(x) is str
.
Modul tipe juga ada jika Anda memeriksa lebih dari int dan string. http://docs.python.org/library/types.html
types.StringTypes
,.
Edit berdasarkan jawaban yang lebih baik di bawah ini. Turunkan sekitar 3 jawaban dan cari tahu tentang kesejukan basestring.
Jawaban lama: Hati-hati dengan string unicode, yang bisa Anda dapatkan dari beberapa tempat, termasuk semua panggilan COM di Windows.
if isinstance(target, str) or isinstance(target, unicode):
isinstance()
juga mengambil tuple sebagai argumen kedua. Jadi, bahkan jika basestring
tidak ada, Anda bisa menggunakannya isinstance(target, (str, unicode))
.
unicode
tampaknya tidak didefinisikan:NameError: name 'unicode' is not defined
karena basestring
tidak didefinisikan dalam Python3, trik kecil ini mungkin membantu membuat kode tersebut 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 pada Python2 dan Python3
isinstance(myvar, basestring)
basestring = (str, bytes)
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
type('foo')
menjadi unicode
python 2, dan baris kedua str
menjadi instance dari unicode
. Mereka membuat kode valid dengan Python 2 dan 3. Terima kasih lagi!
Saya juga ingin memperhatikan bahwa jika Anda ingin memeriksa apakah jenis variabel adalah jenis tertentu, Anda dapat membandingkan jenis variabel dengan jenis objek yang dikenal.
Untuk string Anda bisa menggunakan ini
type(s) == type('')
str
? Bagaimana dengan string unicode, yang bahkan tidak diwarisi dari str
dalam 2.x? Gunakan isinstance(s, basestring)
dalam 2.x, atau isinstance(s, str)
dalam 3.x.
isinstance()
memungkinkan untuk subclass (yang merupakan string juga, hanya khusus), type('')
panggilan ekstra itu berlebihan ketika Anda hanya dapat menggunakan str
dan jenisnya adalah lajang, sehingga type(s) is str
akan menjadi tes yang lebih efisien.
Banyak saran bagus diberikan oleh orang lain di sini, tetapi saya tidak melihat ringkasan lintas platform yang baik. Yang berikut harus menjadi penurunan yang baik untuk 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 gunakan isinstance(object, classinfo)
untuk melihat apakah input kita adalah str
dalam Python 3 atau basestring
dalam Python 2.
>=
setidaknya.
a = '1000' # also tested for 'abc100', 'a100bc', '100abc'
isinstance(a, str) or isinstance(a, unicode)
mengembalikan True
type(a) in [str, unicode]
mengembalikan True
Inilah jawaban saya untuk mendukung Python 2 dan Python 3 bersama dengan persyaratan berikut:
six
atau modul compat serupa karena cenderung menyembunyikan apa yang ingin dicapai.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)
Jika Anda tidak ingin bergantung pada lib eksternal, ini berfungsi 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");
Anda cukup menggunakan fungsi isinstance untuk memastikan bahwa data input berupa format string atau unicode . Contoh di bawah ini 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
s = '123'
issubclass(s.__class__, str)
Beginilah cara saya melakukannya:
if type(x) == type(str()):
type(str())
adalah cara yang sangat tidak pasti untuk mengatakan str
. Jenisnya lajang, jadi type(x) is str
lebih efisien. isinstance()
harus digunakan sebagai gantinya, kecuali jika Anda memiliki alasan yang sangat baik untuk mengabaikan subclass dari str
.
Saya telah melihat:
hasattr(s, 'endswith')
>>> thing = 'foo'
>>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode'
True
type(thing).__name__ == 'str'
lebih type(thing) == str
atau isinstance(thing, str)
? Juga unicode
tidak ada dalam versi modern Python.