() translation by (you can also view the original English article)
Ketika menyebutkan debugging, ini berarti mungkin ada sebuah bug di bagian tengah. Nah, maksud saya bukan serangga yang mungkin ditemukan di rumah—yang saya maksud adalah bug dalam pemrograman!
Sebelum melangkah lebih jauh dalam tutorial ini, mari dapatkan beberapa istilah di sini. Mari tentukan secara singkat apa yang kita maksud oleh sebuah bug dan debugging.
Bugs
Sebuah bug dalam computing terjadi baik dalam software dan hardware namun fokus di sini adalah pada software. Mari saya sebutkan sebuah kepercayaan dimana asal mula istilah bug. Dipercaya bahwa penggunaan pertama istilah bug dalam computing adalah ketika bug sebenarnya (ngengat) ditemukan pada relay komputer Mark II. Istilah bug juga digunakan pada akhir abad 19 untuk menjelaskan kesalahan teknis.
Bugs dalam software menyebabkan program menghasilkan perilaku yang tidak diinginkan. Itu adalah istilah yang umum digunakan untuk mengacu pada sebuah kesalahan dengan lokasi dan alamat yang tidak diketahui, dan mereka dapat menyebabkan permasalahan yang parah (yaitu merusak program).
Dalam situasi ini, debugging memainkan perannya.
Debugging
Nah, orang mungkin mengatakan bahwa cara terbaik untuk menghindari tiap permasalahan adalah tidak menghasilkan bugs dari awal. Namun ini sayangnya langka, dan itu tidak mudah untuk menghasilkan sebuah program bersih dari semula. Memiliki bugs merupakan situasi normal yang akan kamu hadapi.
Debugging adalah proses mencari, menganalisa, dan memperbaiki tiap bug (kesalahan) yang mungkin kamu hadapi. Goal akhir debugging adalah menghilangkan bugs, dan untuk menghasilkan sebuah program yang berjalan dan bertindak seperti yang diinginkan. Penting untuk mencatat di sini bahwa kebanyakan waktu akan dihabiskan pada mencari bugs karena, seperti yang disebutkan di atas, itu berada pada lokasi yang tidak diketahui.
Untuk memiliki ide seberapa sulitnya debugging, lihat apa yang dikatakan Brian W. Kernighan:
Setiap orang mengetahui bahwa debugging dua kali lebih sulit daripada menulis program pertama kalinya. Jadi jika kamu sama pintarnya dengan saat kamu menulisnya, bagaimana cara melakukan debug?
Menangani Exceptions Dalam Python
Sebuah exception adalah sebuah object yang mengindikasikan bahwa kita memiliki sebuah bug (error) Dengan kata lain, Python menggunakan exception untuk mengkomunikasikan bahwa ada bug di dalam program. Ini bisa berupa bagian localization dalam proses debugging. Penerimaan exception object dan melakukan tindakan yang diperlukan untuk mengatasi bug mengacu pada penanganan exception. Ini akan menjadi tahapan menganalisa dan memperbaiki di dalam proses debugging.
Pernyataan Try
Pernyataan try
Python digunakan untuk penanganan exception dan memiliki dua bentuk: try/except
dan try/finally
. Dalam kasus pertama, klausul try
dapat diikuti oleh satu atau lebih klausul except
, sementara dalam kasus terakhir, itu hanya dapat diikuti hanya oleh satu klausul finally
.
try/except
Sintaks try/except
adalah sebagai berikut:
1 |
try: |
2 |
# try block code
|
3 |
except: |
4 |
# except block code
|
Body klausul try
akan berisi code yang mungkin membuat sebuah exception, menyediakan bahwa jika exception dibuat, semua pernyataan di dalam blok akan dilewatkan. Di sisi lainnya, body klausul except
disebut exception handler, dimana itu digunakan untuk menangkap exception. Code blok except
hanya akan dijalankan jika sebuah exception telah dibuat, jika tidak blok itu akan dilewatkan. Kamu dapat menggunakan exception bawaan seperti yang ditunjukkan dalam Python Standard Library.
Mari ambil sebuah contoh untuk membuat semuanya menjadi jelas. Katakanlah kita diminta untuk memasukkan sebuah denominator dalam sebuah formula pembagian. Karena pembagian dengan nol tidak diizinkan, mari tulis pernyataan try/except
yang memeriksa jika ada pembagian oleh nol, dan mencetak sebuah pesan jika error ini terjadi.
1 |
denominator = input('Enter a denominator value: ') |
2 |
try: |
3 |
formula = 15/denominator |
4 |
print 'The result is ' + str(formula) |
5 |
except ZeroDivisionError: |
6 |
print 'You attempted to divide by zero which is not allowed' |
Jika kamu memasukkan nilai 5
, sebagai contoh, kamu akan mendapatkan output berikut:
1 |
The result is 3 |
Sekarang, coba masukkan nilai 0
sebagai input. Output apa yang akan kamu dapatkan dalam kasus ini?
try/finally
try/finally
adalah cara lainnya untuk menulis pernyataan try di dalam Python. Klausul finally
disebut klausul pembersihan/penghilangan karena mereka selalu harus dijalankan terlepas apakah sebuah exception terjadi di dalam blok try
.
Mari ambil contoh dalam section di atas, namun dengan klausul finally
:
1 |
denominator = input('Enter a denominator value: ') |
2 |
try: |
3 |
formula = 15/denominator |
4 |
print 'The result is ' + str(formula) |
5 |
finally: |
6 |
print 'You attempted to divide by zero which is not allowed' |
Perhatikan bahwa ketika kamu memasukkan nilai 5
sebagai input, sebagai contoh, kamu akan mendapatkan input berikut:
1 |
The result is 3 |
2 |
You attempted to divide by zero which is not allowed |
Kata kunci raise
Kata kunci raise
adalah cara lainnya untuk menangani exception di dalam Python. Dalam kasus ini, kamu akan dapat mengangkat sendiri exceptionmu—yaitu exception yang diangkat ketika sebuah permasalahan terjadi di luar lingkup error yang diharapkan.
Mari lihat sebuah contoh penggunaan kata kunci raise
untuk mengerti lebih jauh tentang konsepnya.
1 |
try: |
2 |
x = input('Enter a number in the range 1-10: ') |
3 |
if x<1 or x>10: |
4 |
raise Exception |
5 |
print 'Great! You listened to me and entered a valid number' |
6 |
|
7 |
except: |
8 |
print 'Your number seems to be outside the range 1-10' |
Dalam contoh ini, jika kamu memasukkan sebuah angka di luar rentang yang diizinkan, pernyataan print
di dalam blok except
akan dijalankan.
Lanjutkan, coba beberapa nilai dan periksa outputnya.
Module traceback
Module traceback
Python adalah cara lainnya untuk menangani exception di dalam Python. Itu pada dasarnya digunakan untuk mencetak kumpulan jejak sebuah program setelah exception terjadi. traceback
berisi pesan error, nomor baris yang menyebabkan error, dan call stack, yaitu urutan function call yang mengarahkan ke error.
Mari ambil sebuah contoh yang membangun sebuah traceback
:
1 |
def createException(name): |
2 |
raise Exception('It seems that ' + name + ' raised an exception') |
3 |
|
4 |
createException('Abder') |
Jika kamu menjalankan script ini, kamu akan mendapatkan output yang tampak sebagai berikut:
1 |
Traceback (most recent call last): |
2 |
File "test.py", line 4, in <module> |
3 |
createException('Abder') |
4 |
File "test.py", line 2, in createException |
5 |
raise Exception('It seems that ' + name + ' raised an exception') |
6 |
Exception: It seems that Abder raised an exception |
Perhatikan bahwa bug (error) terjadi pada line 2
di dalam function createException
. Perhatikan juga bahwa call stack dapat membantu kita melacak call mana yang mengacu pada error, dimana dalam kasus ini adalah call yang terjadi dalam line 4
.
Tutorial semakin panjang, dan saya akan berhenti pada titik ini. Seperti yang telah kamu lihat, melakukan debugging pada program adalah hal yang alami dan reguler yang kita lakukan, dan saya percaya bahwa jenis error yang kamu lihat di dalam tutorial ini terdengar familiar bukan?
Ada cara lainnya untuk melakukan debugging pada program Python dan menangani exception. Cara yang terkenal, misalnya, adalah assert statement
.
Selamat melakukan debugging!