Bahkan programmer paling berpengalaman pun bisa membuat kesalahan saat menulis kode. Bagi programmer Python, kesalahan ini umumnya termasuk dalam dua kategori: error atau exception.
Error terutama terkait dengan sintaks. Error harus diperbaiki agar program dapat dijalankan. Exception, di sisi lain, terjadi ketika kodenya benar secara sintaks, tetapi sesuatu mengganggu jalannya program saat dieksekusi.
Dalam tutorial ini, kita akan melihat salah satu exception yang paling sering ditemui baik oleh programmer baru maupun berpengalaman: pengecualian KeyError. Kita akan membahas detail KeyError di Python, memberikan contoh, serta berbagai teknik untuk menangani jenis pengecualian ini. Jika Anda ingin mempelajari cara mengidentifikasi dan memperbaiki kesalahan di Python, lihat juga tutorial kami Penanganan Exception & Error di Python.
Apa itu Pengecualian KeyError?
Di Python, pengecualian KeyError adalah salah satu pengecualian bawaan yang dirancang untuk menangani berbagai kondisi kesalahan umum. Pengecualian KeyError dapat dipahami sebagai subclass, bersama dengan IndexError, dari pengecualian LookupError yang lebih umum, yang semuanya merupakan objek dari kelas Exception.
Secara khusus, pengecualian KeyError muncul ketika seorang programmer mencoba mengakses kunci yang tidak ada di dalam dictionary. Dictionary, sebagai referensi, adalah struktur data yang menyimpan data dalam pasangan kunci-nilai, dan nilai dalam dictionary diakses melalui kuncinya — karenanya disebut KeyError.
Penyebab Umum dan Contoh KeyError di Python
Mari kita lihat contoh menggunakan dictionary negara dan ibu kotanya:
dictionary_capitals ={'Madrid':'Spain','Lisboa':'Portugal','London':'United Kingdom'}Didukung oleh
Untuk mencari informasi dalam dictionary kita, kita perlu menyebutkan kuncinya di dalam tanda kurung siku dan Python akan mengembalikan nilai yang terkait.
Traceback (most recent call last):
File "<stdin>", line 1,in<module>
KeyError:'Rome'Didukung oleh
Kita juga bisa menemui pengecualian KeyError saat mencoba mengakses kunci yang tidak ada pada objek pemetaan (mapping) Python lain yang mengadopsi bentuk dictionary. Sebagai contoh, objek os.environ mengembalikan dictionary yang menyimpan variabel lingkungan pengguna sebagai kunci beserta nilai yang terkait.
Pada kode berikut, kita mencoba mengakses nilai yang terkait dengan kunci USERS di dictionary os.environ. Karena USERS tidak ada di dictionary os.environ, kode kita menghasilkan KeyError.
#Calling a non-existent environmental variable
os.environ['USERS']
Traceback (most recent call last):
File "<stdin>", line 1,in<module>
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/os.py", line 679,in __getitem__
raise KeyError(key)fromNone
KeyError:'USERS'Didukung oleh
Mari jelajahi metode untuk menangani pengecualian KeyError. Kita punya dua strategi: Mencegah KeyError atau menangkap KeyError dengan penanganan error.
Mencegah KeyError
Seperti yang telah kita lihat, Python akan melempar KeyError jika kita mengakses kunci yang tidak ada. Untuk mencegahnya, kita dapat mengakses kunci dalam dictionary menggunakan metode .get() agar kode kita lebih toleran terhadap error. Jika, saat menggunakan metode ini, kita menemui kunci yang tidak ada, Python akan mengembalikan nilai None alih-alih KeyError. Ini adalah pendekatan yang baik.
print(dictionary_capitals.get('Prague'))Didukung oleh
Sebagai alternatif, kita bisa memeriksa apakah sebuah kunci ada sebelum mengaksesnya. Cara mencegah pengecualian ini dikenal sebagai “Look Before You Leap,” atau disingkat LBYL. Dalam kasus ini, kita bisa menggunakan pernyataan if untuk memeriksa apakah kunci tersebut ada dan, jika tidak, kita dapat menanganinya pada klausa else.
capital ="Prague"if capital in dictionary_capitals.keys():
value = dictionary_capitals[capital]else:print("The key {} is not present in the dictionary".format(capital))Didukung oleh
Menangkap KeyError dengan penanganan exception
Pendekatan kedua dikenal sebagai “Easier to Ask Forgiveness Than Permission.” EAFP, sebagaimana disebut, sebenarnya adalah cara yang lebih standar untuk menangani pengecualian di Python.
Mengadopsi gaya penulisan kode EAFP berarti kita mengasumsikan keberadaan kunci yang valid dan menangkap pengecualian jika asumsi tersebut salah. Sementara pendekatan LBYL kita bergantung pada pernyataan if/else, pendekatan EAFP bergantung pada klausa try/except.
Pada contoh berikut, alih-alih memeriksa apakah kuncinya ada, kita mencoba mengakses kunci yang diinginkan. Jika, karena suatu alasan, kuncinya tidak ada, maka kita cukup menangkap KeyError di klausa except dan menanganinya sebagaimana mestinya.
capital ="Prague"try:
value = dictionary_capitals[capital]except KeyError:print("The key {} is not present in the dictionary".format(capital))Didukung oleh
Manajemen KeyError Python Lanjutan
Menggunakan defaultdict untuk penanganan kunci otomatis
Kita melihat bahwa, setiap kali kita mencoba mengakses kunci yang tidak ada di dictionary, Python akan mengembalikan pengecualian KeyError. Metode .get() yang kita ulas merupakan pendekatan yang toleran terhadap error dan cukup bekerja, namun belum optimal.
Modul Collections menawarkan defaultdict, yang merupakan pendekatan yang lebih optimal untuk menangani entri dictionary. Berbeda dengan dictionary standar yang melempar KeyError jika kita mengakses kunci yang tidak ada, defaultdict memungkinkan kita menentukan nilai default yang dikembalikan setiap kali kunci tidak ditemukan. Kode berikut menunjukkan cara mengimpor defaultdict dari Collections dan membuat nilai default dengan fungsi lambda. Jika Anda bingung tentang fungsi lambda, lihat tutorial Python lambda kami untuk mempelajari lebih lanjut.
from collections import defaultdict
# Defining the dict
capitals = defaultdict(lambda:"The key doesn't exist")
capitals['Madrid']='Spain'
capitals['Lisboa']='Portugal'print(capitals['Madrid'])print(capitals['Lisboa'])print(capitals['Ankara'])Didukung oleh
Terakhir, perlu disebutkan bahwa, dalam keadaan tertentu, mungkin tepat untuk dengan sengaja melempar KeyError guna menegakkan batasan tertentu.
Kita tahu bahwa, dalam banyak kasus, fungsi bergantung pada data tertentu yang tersedia untuk menjalankan operasinya. Memicu KeyError secara manual memastikan fungsi gagal dengan jelas dan dapat diprediksi ketika data yang diperlukan tidak ada. Dalam kasus ini, pesan error yang disertakan dengan KeyError membantu kita memahami persis apa yang salah dengan input yang diberikan, sehingga debugging menjadi lebih mudah.
Mari perjelas dengan contoh. Di sini kita membuat fungsi yang menerima sebuah dictionary sebagai argumen. Pengguna harus menyediakan dictionary dengan kunci yang benar agar fungsi bekerja dengan baik. Kita membuat fungsi dalam kasus ini karena kita ingin segera mengetahui jika kuncinya hilang, alih-alih membiarkan error berlanjut lebih jauh di dalam kode.
defmy_function(my_dict):if'critical_key'notin my_dict:raise KeyError('critical_key is missing from the dictionary. Please modify the dictionary')Didukung oleh
Kesimpulan
Semoga Anda menyukai artikel ini. KeyError adalah salah satu pengecualian yang paling umum ditemui pengembang Python. Menguasai seni penanganan error dan exception adalah bagian penting untuk menjadi programmer Python yang andal. Pelajari lebih lanjut tentang teknik pemrograman fungsional lainnya dan dasar-dasar ngoding dengan jalur keterampilan Python Programming dan Python Fundamentals kami. Selain itu, lihat juga tutorial Himpunan (Set) Python dan Teori Himpunan untuk mempelajari konsep terkait lainnya.
Saya adalah analis data lepas yang berkolaborasi dengan perusahaan dan organisasi di seluruh dunia dalam proyek ilmu data. Saya juga instruktur ilmu data dengan pengalaman lebih dari 2 tahun. Saya rutin menulis artikel terkait ilmu data dalam bahasa Inggris dan Spanyol, beberapa di antaranya telah diterbitkan di situs tepercaya seperti DataCamp, Towards Data Science, dan Analytics Vidhya. Sebagai ilmuwan data dengan latar belakang ilmu politik dan hukum, tujuan saya adalah bekerja pada irisan kebijakan publik, hukum, dan teknologi, memanfaatkan kekuatan gagasan untuk mendorong solusi serta narasi inovatif yang dapat membantu kita menghadapi tantangan mendesak, khususnya krisis iklim. Saya menganggap diri saya seorang autodidak, pembelajar sepanjang hayat, dan pendukung kuat pendekatan multidisipliner. Tidak pernah ada kata terlambat untuk mempelajari hal baru.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Bahkan programmer paling berpengalaman pun bisa membuat kesalahan saat menulis kode. Bagi programmer Python, kesalahan ini umumnya termasuk dalam dua kategori: error atau exception.
Error terutama terkait dengan sintaks. Error harus diperbaiki agar program dapat dijalankan. Exception, di sisi lain, terjadi ketika kodenya benar secara sintaks, tetapi sesuatu mengganggu jalannya program saat dieksekusi.
Dalam tutorial ini, kita akan melihat salah satu exception yang paling sering ditemui baik oleh programmer baru maupun berpengalaman: pengecualian
KeyError. Kita akan membahas detailKeyErrordi Python, memberikan contoh, serta berbagai teknik untuk menangani jenis pengecualian ini. Jika Anda ingin mempelajari cara mengidentifikasi dan memperbaiki kesalahan di Python, lihat juga tutorial kami Penanganan Exception & Error di Python.Apa itu Pengecualian KeyError?
Di Python, pengecualian
KeyErroradalah salah satu pengecualian bawaan yang dirancang untuk menangani berbagai kondisi kesalahan umum. PengecualianKeyErrordapat dipahami sebagai subclass, bersama denganIndexError, dari pengecualianLookupErroryang lebih umum, yang semuanya merupakan objek dari kelasException.Secara khusus, pengecualian
KeyErrormuncul ketika seorang programmer mencoba mengakses kunci yang tidak ada di dalam dictionary. Dictionary, sebagai referensi, adalah struktur data yang menyimpan data dalam pasangan kunci-nilai, dan nilai dalam dictionary diakses melalui kuncinya — karenanya disebutKeyError.Penyebab Umum dan Contoh KeyError di Python
Mari kita lihat contoh menggunakan dictionary negara dan ibu kotanya:
Untuk mencari informasi dalam dictionary kita, kita perlu menyebutkan kuncinya di dalam tanda kurung siku dan Python akan mengembalikan nilai yang terkait.
Jika kita mencoba mengakses kunci yang tidak ada di dictionary, Python akan menampilkan pesan error pengecualian
KeyError.Kita juga bisa menemui pengecualian
KeyErrorsaat mencoba mengakses kunci yang tidak ada pada objek pemetaan (mapping) Python lain yang mengadopsi bentuk dictionary. Sebagai contoh, objekos.environmengembalikan dictionary yang menyimpan variabel lingkungan pengguna sebagai kunci beserta nilai yang terkait.Pada kode berikut, kita mencoba mengakses nilai yang terkait dengan kunci
USERSdi dictionaryos.environ. KarenaUSERStidak ada di dictionaryos.environ, kode kita menghasilkanKeyError.Ternyata, dictionary sangat umum digunakan di Python. Contoh lainnya adalah implementasi sesuatu yang lebih abstrak bernama hashmap. Lihat tutorial Panduan Hashmap di Python kami untuk mempelajari lebih lanjut tentang hashmap.
Menangani Pengecualian KeyError di Python
Mari jelajahi metode untuk menangani pengecualian
KeyError. Kita punya dua strategi: MencegahKeyErroratau menangkapKeyErrordengan penanganan error.Mencegah KeyError
Seperti yang telah kita lihat, Python akan melempar
KeyErrorjika kita mengakses kunci yang tidak ada. Untuk mencegahnya, kita dapat mengakses kunci dalam dictionary menggunakan metode.get()agar kode kita lebih toleran terhadap error. Jika, saat menggunakan metode ini, kita menemui kunci yang tidak ada, Python akan mengembalikan nilaiNonealih-alihKeyError. Ini adalah pendekatan yang baik.Sebagai alternatif, kita bisa memeriksa apakah sebuah kunci ada sebelum mengaksesnya. Cara mencegah pengecualian ini dikenal sebagai “Look Before You Leap,” atau disingkat LBYL. Dalam kasus ini, kita bisa menggunakan pernyataan
ifuntuk memeriksa apakah kunci tersebut ada dan, jika tidak, kita dapat menanganinya pada klausaelse.Menangkap KeyError dengan penanganan exception
Pendekatan kedua dikenal sebagai “Easier to Ask Forgiveness Than Permission.” EAFP, sebagaimana disebut, sebenarnya adalah cara yang lebih standar untuk menangani pengecualian di Python.
Mengadopsi gaya penulisan kode EAFP berarti kita mengasumsikan keberadaan kunci yang valid dan menangkap pengecualian jika asumsi tersebut salah. Sementara pendekatan LBYL kita bergantung pada pernyataan if/else, pendekatan EAFP bergantung pada klausa try/except.
Pada contoh berikut, alih-alih memeriksa apakah kuncinya ada, kita mencoba mengakses kunci yang diinginkan. Jika, karena suatu alasan, kuncinya tidak ada, maka kita cukup menangkap
KeyErrordi klausa except dan menanganinya sebagaimana mestinya.Manajemen KeyError Python Lanjutan
Menggunakan defaultdict untuk penanganan kunci otomatis
Kita melihat bahwa, setiap kali kita mencoba mengakses kunci yang tidak ada di dictionary, Python akan mengembalikan pengecualian
KeyError. Metode.get()yang kita ulas merupakan pendekatan yang toleran terhadap error dan cukup bekerja, namun belum optimal.Modul
Collectionsmenawarkandefaultdict, yang merupakan pendekatan yang lebih optimal untuk menangani entri dictionary. Berbeda dengan dictionary standar yang melemparKeyErrorjika kita mengakses kunci yang tidak ada,defaultdictmemungkinkan kita menentukan nilai default yang dikembalikan setiap kali kunci tidak ditemukan. Kode berikut menunjukkan cara mengimpordefaultdictdariCollectionsdan membuat nilai default dengan fungsilambda. Jika Anda bingung tentang fungsi lambda, lihat tutorial Python lambda kami untuk mempelajari lebih lanjut.Dengan sengaja melempar KeyError
Terakhir, perlu disebutkan bahwa, dalam keadaan tertentu, mungkin tepat untuk dengan sengaja melempar
KeyErrorguna menegakkan batasan tertentu.Kita tahu bahwa, dalam banyak kasus, fungsi bergantung pada data tertentu yang tersedia untuk menjalankan operasinya. Memicu
KeyErrorsecara manual memastikan fungsi gagal dengan jelas dan dapat diprediksi ketika data yang diperlukan tidak ada. Dalam kasus ini, pesan error yang disertakan denganKeyErrormembantu kita memahami persis apa yang salah dengan input yang diberikan, sehingga debugging menjadi lebih mudah.Mari perjelas dengan contoh. Di sini kita membuat fungsi yang menerima sebuah dictionary sebagai argumen. Pengguna harus menyediakan dictionary dengan kunci yang benar agar fungsi bekerja dengan baik. Kita membuat fungsi dalam kasus ini karena kita ingin segera mengetahui jika kuncinya hilang, alih-alih membiarkan error berlanjut lebih jauh di dalam kode.
Kesimpulan
Semoga Anda menyukai artikel ini.
KeyErroradalah salah satu pengecualian yang paling umum ditemui pengembang Python. Menguasai seni penanganan error dan exception adalah bagian penting untuk menjadi programmer Python yang andal. Pelajari lebih lanjut tentang teknik pemrograman fungsional lainnya dan dasar-dasar ngoding dengan jalur keterampilan Python Programming dan Python Fundamentals kami. Selain itu, lihat juga tutorial Himpunan (Set) Python dan Teori Himpunan untuk mempelajari konsep terkait lainnya.