Bagaimana saya bisa memeriksa apakah objek Python adalah string (baik reguler atau Unicode)?
python
string
types
compatibility
Matt S.
sumber
sumber
Jawaban:
Python 2
Gunakan
isinstance(obj, basestring)
untuk objek-untuk-tesobj
.Documents .
sumber
Python 2
Untuk memeriksa apakah suatu objek
o
adalah tipe string dari subkelas dari tipe string:karena keduanya
str
danunicode
merupakan subclass daribasestring
.Untuk memeriksa apakah jenisnya
o
tepatstr
:Untuk memeriksa apakah
o
turunan daristr
atau subkelas daristr
:Di atas juga berfungsi untuk string Unicode jika Anda mengganti
str
denganunicode
.Namun, Anda mungkin tidak perlu melakukan pengecekan tipe eksplisit sama sekali. "Mengetik bebek" mungkin sesuai dengan kebutuhan Anda. Lihat http://docs.python.org/glossary.html#term-duck-typing .
Lihat juga Apa cara kanonik untuk memeriksa jenis python?
sumber
basestring
di py2.Python 3
Dalam Python 3.x
basestring
tidak tersedia lagi, sepertistr
jenis string tunggal (dengan semantik Python 2.x'sunicode
).Jadi cek di Python 3.x hanya:
Ini mengikuti perbaikan
2to3
alat konversi resmi : konversibasestring
kestr
.sumber
Python 2 dan 3
(kompatibel lintas)
Jika Anda ingin memeriksa tanpa memperhatikan versi Python (2.x vs 3.x), gunakan
six
( PyPI ) danstring_types
atributnya:Dalam
six
(modul file tunggal yang sangat ringan), cukup lakukan ini :sumber
future
( PyPI ) bahkan untuk menjaga nama:from past.builtins import basestring
basestring
dan kemudian jatuh kembali kestr
. Misalnyadef is_string(obj): try: return isinstance(obj, basestring) # python 2 except NameError: return isinstance(obj, str) # python 3
Saya menemukan ini lagi
pythonic
:karena jenis benda yang tunggal, yang dapat digunakan untuk melakukan membandingkan objek dengan jenis str
sumber
isinstance(obj_to_test, str)
jelas dimaksudkan untuk menguji jenis, dan memiliki keuntungan menggunakan prosedur yang sama seperti untuk kasus-kasus non-str lainnya.Jika seseorang ingin tinggal jauh dari eksplisit jenis-memeriksa (dan ada yang alasan yang baik untuk tinggal jauh dari itu), mungkin bagian paling aman dari protokol string untuk cek adalah:
Itu tidak akan beralih melalui iterable atau iterator, itu tidak akan memanggil daftar string sebuah string dan itu benar mendeteksi stringlike sebagai string.
Tentu saja ada kekurangannya. Misalnya,
str(maybe_string)
mungkin perhitungan yang berat. Seperti yang sering terjadi, jawabannya tergantung .EDIT: Seperti @Tcll tunjukkan dalam komentar, pertanyaan sebenarnya meminta cara untuk mendeteksi string unicode dan bytestrings. Pada Python 2 jawaban ini akan gagal dengan pengecualian untuk string unicode yang berisi karakter non-ASCII, dan pada Python 3 itu akan kembali
False
untuk semua bytestrings.sumber
b = b'test'; r = str(b) == b
manab
menyimpan data yang sama sepertistr(b)
tetapi (menjadi objek byte) tidak memvalidasi sebagai string.Untuk memeriksa apakah variabel Anda adalah sesuatu, Anda dapat melakukan seperti:
Output isistance akan memberi Anda nilai Boolean True atau False sehingga Anda dapat menyesuaikannya. Anda dapat memeriksa akronim yang diharapkan dari nilai Anda dengan awalnya menggunakan: type (s) Ini akan mengembalikan Anda mengetik 'str' sehingga Anda dapat menggunakannya dalam fungsi isistance.
sumber
Saya mungkin berurusan dengan ini dalam gaya mengetik bebek, seperti yang disebutkan orang lain. Bagaimana saya tahu string benar-benar sebuah string? baik, jelas dengan mengubahnya menjadi string!
Jika arg sudah menjadi tipe string atau unicode, real_word akan mempertahankan nilainya tidak dimodifikasi. Jika objek yang lewat mengimplementasikan
__unicode__
metode, yang digunakan untuk mendapatkan representasi unicode-nya. Jika objek yang dilewati tidak dapat digunakan sebagai string,unicode
builtin memunculkan eksepsi.sumber
akan menjadi True jika objek Anda memang tipe string. 'str' adalah kata yang dilindungi undang-undang.
maaf, jawaban yang benar adalah menggunakan 'basestring' alih-alih 'str' untuk memasukkan string unicode juga - seperti yang disebutkan di atas oleh salah satu responden lainnya.
sumber
Malam ini saya mengalami situasi di mana saya pikir saya harus memeriksa
str
jenisnya, tetapi ternyata saya tidak melakukannya.Pendekatan saya untuk memecahkan masalah mungkin akan berhasil dalam banyak situasi, jadi saya menawarkannya di bawah jika orang lain yang membaca pertanyaan ini tertarik (hanya Python 3).
Beberapa tes:
sumber
Sederhana, gunakan kode berikut (kami menganggap objek yang disebutkan sebagai objek) -
sumber
Anda dapat mengujinya dengan menggabungkan dengan string kosong:
Edit :
Mengoreksi jawaban saya setelah komentar menunjukkan bahwa ini gagal dengan daftar
sumber
Untuk pendekatan pengetikan bebek yang bagus untuk string-like yang memiliki bonus bekerja dengan kedua Python 2.x dan 3.x:
ikan bijak dekat dengan mengetik bebek sebelum ia beralih ke
isinstance
pendekatan, kecuali yang+=
memiliki arti yang berbeda untuk daftar daripada yang+
dilakukannya.sumber
isalpha
, tetapi siapa yang tahu metode apa yang aman untuk dicari?__str__
metode plus kesetaraan sebenarnya bisa menjadi metode yang bodoh. Tetapi bahkan itu bukan tanpa peringatan.try
bisa lebih cepat. Jika Anda mengharapkannya 99% dari waktu, mungkin tidak. Perbedaan kinerja yang minimal, lebih baik menjadi idiomatis kecuali jika Anda membuat kode profil dan mengidentifikasinya sebagai benar-benar lambat.dari EDX - kursus online MITx: 6.00.1x Pengantar Ilmu Komputer dan Pemrograman Menggunakan Python
sumber
str
!