Memahami sistem tipe Python adalah kunci untuk memecahkan bug rumit ini.

Mencoba mengambil data dari suatu objek dan malah melihat kesalahan "objek tidak dapat disubkripsikan"? Masalahnya adalah, Anda mengindeks tipe data yang salah.

Cari tahu semua tentang jenis subskrip dan cara mengatasi kesalahan ini.

Apa Arti "Berlangganan" di Python?

Istilah "subscriptable" dalam Python berarti tipe data yang menyimpan banyak nilai yang dapat Anda akses satu per satu. Anda dapat mengakses nilai tertentu dari tipe data yang dapat disubskrip melalui indeksnya, menggunakan notasi tanda kurung siku ([]).

Jika Anda mencoba mengakses item dalam tipe data yang tidak dapat diindeks, Python memunculkan pengecualian "TypeError: object is not subscriptable".

Tipe data berikut dapat disubskrip dengan Python: daftar, string, tupel, dan kamus.

daftar_contoh = [1, 3, 5, "Idowu"]
string_contoh = "Idowu Omisola"
tuple_contoh = (1, 3, 5, "Idowu")
dict_contoh = {"nama": "Idowu", "Bahasa": "Yoruba"}

cetak (daftar_contoh[0]) # 1
cetak (string_contoh[3]) #w
cetak (tuple_example[1]) # 3
cetak (dict_example["nama"]) #idowu

instagram viewer

Namun, set, integer, float, dan Boolean, tidak dapat diakses melalui pengindeksan, sehingga tidak dapat disubskrip:

float_example = 12.45
int_contoh = 12367
bool_contoh = BENAR
set_contoh = {1, 3, 5, "Python"}

cetak (float_example[1])
cetak (bool_contoh[2])
cetak (int_contoh[2])
cetak (set_contoh[2])

Mencoba menjalankan setiap pernyataan ini menghasilkan pengecualian "objek tidak dapat disubkripsikan":

Menyelesaikan Pengecualian

Menyelesaikan pengecualian "objek tidak dapat disubkripsikan" lebih mudah setelah Anda memahami aturan untuk mengakses setiap tipe data. Jadi mulailah debugging Python Anda dengan memeriksa tipe data dari objek yang Anda coba indeks.

float_example = 12.45
int_contoh = 12367
bool_contoh = BENAR
set_contoh = {1, 3, 5, "Python"}

cetak (ketik (float_example)) #
cetak (ketik (int_example)) #
cetak (ketik (contoh_bool)) #
cetak (ketik (set_example)) #

Setelah Anda menentukan bahwa tipe data tidak dapat disubskrip, mengonversinya menjadi tipe yang dapat diindeks akan menyelesaikan masalah. Ini berguna jika datanya dari API pihak ketiga. Mengonversi tipe data seperti integer, float, dan Boolean menjadi string membuatnya dapat disubkripsikan:

cetak (str (contoh_float)[:2]) # 12
cetak (str (int_contoh)[:2]) # 12
cetak (str (contoh_bool)[:2]) #tr

Anda bahkan bisa memanipulasi string Python yang dihasilkan seperti yang Anda inginkan. Jika berurusan dengan integer dan float, Anda mungkin ingin mempertahankan tipe data asli di output. Untuk melakukan ini, ubah nilai yang dihasilkan menjadi tipe data aslinya setelah mengindeksnya sebagai string:

convert_float = float (str (contoh_float)[:2])
convert_int = int (str (int_example)[:2])

#12.0 Jenis data:
cetak (convert_float, f'Tipe data:{ketik (convert_float)}')

#12 Jenis data:
cetak (convert_int, f'Tipe data:{ketik (convert_int)}')

Untuk satu set, Anda bisa mengubahnya menjadi daftar. Meskipun Anda dapat mengubah objek yang ditetapkan menjadi daftar menggunakan daftar (set) Python one-liner, ini tidak mempertahankan posisi item dalam daftar yang dihasilkan. Untuk memastikan Anda mendapatkan daftar dengan posisi item yang dipertahankan, gunakan fungsi lambda Python seperti:

set_contoh = {1, 3, 5, "Python"}
dikonversi = diurutkan (set_example, key=lambda x: (isinstance (x, str), x))

cetak (dikonversi[3]) # Python

Kuasai Debugging Python

Python memiliki kurva belajar yang mulus. Tetapi pengecualian sederhana dapat membuat Anda kesal jika Anda tidak tahu cara menanganinya. Belajar untuk men-debug kode Anda dan meluangkan waktu Anda dengan pemecahan masalah sangat membantu untuk memperbaiki kesalahan dan pengecualian pengkodean Python.