Kursus
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'}
Untuk mencari informasi dalam dictionary kita, kita perlu menyebutkan kuncinya di dalam tanda kurung siku dan Python akan mengembalikan nilai yang terkait.
dictionary_capitals['Madrid']
'Spain'
Jika kita mencoba mengakses kunci yang tidak ada di dictionary, Python akan menampilkan pesan error pengecualian KeyError.
dictionary_capitals['Rome']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Rome'
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) from None
KeyError: 'USERS'
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: 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'))
None
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))
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))
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'])
Spain
Portugal
The key doesn't exist
Dengan sengaja melempar KeyError
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.
def my_function(my_dict):
if 'critical_key' not in my_dict:
raise KeyError('critical_key is missing from the dictionary. Please modify the dictionary')
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.

