Debugging Efektif dengan Pernyataan Penegasan Python

Apakah Anda seorang pemrogram? Jika demikian, proses debug adalah keterampilan penting, terlepas dari bahasa yang Anda gunakan untuk membuat kode. Pada artikel ini, Anda akan belajar cara menggunakan pernyataan tegas di Python untuk proses debug yang efektif.

Saat Anda mengerjakan sebuah proyek, Anda akan menentukan beberapa modul. Ini termasuk fungsi, definisi kelas, dan banyak lagi. Dan Anda mungkin akan mengalami kesalahan atau hasil yang tidak terduga karena bug dalam penerapannya. Pernyataan penegasan sangat membantu dalam men-debug kode tersebut.

Dalam tutorial ini, kita akan mempelajari sintaks untuk menggunakan pernyataan tegas diikuti dengan contoh kode untuk melihatnya beraksi. Kita juga akan melihat apa itu kesalahan pernyataan dan bagaimana kita dapat menggunakannya untuk memperbaiki kesalahan dalam kode selama pengembangan.

Mari kita mulai!

Cara Menggunakan Pernyataan Penegasan dengan Python

Kita akan mempelajari sintaks untuk menggunakan pernyataan penegasan, lalu melanjutkan ke kode beberapa contoh.

Sintaks Pernyataan Assert

Mari kita mulai dengan sintaks untuk menggunakan pernyataan tegas di Python:

assert expression, message

Di Sini,

  • ekspresi adalah ekspresi Python yang valid untuk dievaluasi. Ini bisa berupa kondisi nilai variabel, nilai kebenaran variabel, nilai pengembalian dari suatu fungsi, dan lainnya.
  • Selama ekspresi bernilai True, pernyataan tegas tidak menimbulkan kesalahan atau mengembalikan apa pun. Hal ini menunjukkan bahwa program berjalan sesuai dengan yang diharapkan.
  • Jika ekspresi tidak lagi True, pengecualian AssertionError dimunculkan.
  • pesan adalah string opsional. Anda dapat menentukan pesan yang ditampilkan di pelacakan kembali setiap kali pengecualian AssertionError dimunculkan.

Selanjutnya, mari lanjutkan ke kode beberapa contoh di mana pernyataan tegas dapat membantu kita menulis kode yang lebih bersih dan bebas bug.

  Intel Mac vs. Apple Silicon ARM Mac: Mana yang Harus Anda Beli?

Anda dapat menemukan contoh kode yang digunakan dalam tutorial ini di intisari GitHub ini.

Contoh Pernyataan Penegasan Python

Perhatikan contoh berikut. Katakanlah Anda memiliki variabel diskon dalam kode Anda. Tapi Anda ingin nilainya selalu kurang dari atau sama dengan max_discount.

Untuk memastikan bahwa Anda secara tidak sengaja tidak menyetel variabel diskon ke suatu nilai, Anda dapat menambahkan pernyataan. Ekspresi untuk mengevaluasi adalah: diskon <= max_discount.

>>> max_discount = 50
>>> discount = 20
>>> assert discount <= max_discount

Di sini, diskon (20) kurang dari max_discount (50). Jadi pernyataan tegas tidak menimbulkan kesalahan apa pun.

Pengecualian AssertionError

Jika variabel diskon diatur ke nilai yang lebih besar dari max_discount, pengecualian AssertionError dimunculkan.

>>> discount = 75
>>> assert discount <= max_discount
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

Kita tahu bahwa pernyataan penegasan juga memungkinkan kita menentukan string pesan opsional.

Mari kita juga menggunakan string pesan yang memberikan info diagnostik yang lebih deskriptif. Untuk pernyataan tegas, mari tambahkan f-string Python yang juga berisi nilai discount dan max_discount.

>>> assert discount <= max_discount, f"discount should be at most {max_discount}; got discount = {discount}"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: discount should be at most 50; got discount = 75

Seperti yang terlihat pada sel keluaran di atas, pengecualian AssertionError sekarang menyertakan nilai variabel discount dan max_discount.

Men-debug dan Menguji Fungsi Python dengan Assert

Saat mendefinisikan fungsi, terkadang Anda mungkin secara tidak sengaja memperkenalkan bug (kesalahan logis) yang akan mencegah fungsi Anda berfungsi sebagaimana mestinya.

Mari kita ambil contoh. Misalkan ada ujian di kelas dan siswa diberi kesempatan untuk mencoba pertanyaan bonus. Setiap siswa yang mencoba pertanyaan bonus akan mendapatkan 10 nilai tambahan dalam ujian. 😄

Pertimbangkan fungsi get_final_score berikut:

  • Dibutuhkan skor saat ini, skor, dan bonus Boolean.
  • Jika seorang siswa telah menjawab pertanyaan bonus, bonus Boolean adalah Benar, dan mereka mendapat 10 poin lebih banyak dari skor mereka saat ini.
  • Fungsi kemudian mengembalikan skor akhir.
def get_final_score(score,bonus):
    if bonus:
        score += 10
    return score

Mari lakukan beberapa panggilan ke fungsi tersebut. Kita melihat bahwa untuk skor 34 dan 40 dengan bonus disetel ke Benar dan Salah, skor akhir masing-masing adalah 44 dan 40.

print(get_final_score(34,True))
# 44
print(get_final_score(40,False))
# 40

Namun, poin maksimum pada tes tersebut adalah, katakanlah, 50. Jadi, jika seorang siswa mendapat skor 49 dan juga telah menjawab pertanyaan bonus, fungsi get_final_score akan dengan senang hati menghitung skor akhir menjadi 59.

print(get_final_score(49,True))
# 59

Secara teknis, itu mungkin. Tetapi mari kita asumsikan bahwa seorang siswa tidak dapat mencetak lebih dari poin maksimum yang mungkin untuk ujian tersebut. 🙂

  Nintendo Switch Borderlands Pre Sequel Shift Codes: Redeem Now

Jadi mari kita menginisialisasi variabel max_score. Dan tangkap skor yang dikembalikan dari fungsi dalam variabel final_score.

Selanjutnya kami menambahkan pernyataan yang memeriksa apakah skor_akhir kurang dari skor_maks.

def get_final_score(score,bonus):
    if bonus:
        score += 10
    return score

final_score = get_final_score(47,True)
max_score = 50

assert final_score <= max_score

Kami sekarang mendapatkan pengecualian AssertionError untuk panggilan fungsi get_final_score(47,True):

Traceback (most recent call last):
  File "main.py", line 17, in <module>
    assert final_score <= max_score
AssertionError

Sekarang kami menambahkan f-string deskriptif ke pernyataan pernyataan Python:

assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}"
Traceback (most recent call last):
  File "main.py", line 17, in <module>
    assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}"
AssertionError: final_score should be at most 50; got 57

Memodifikasi Fungsi

Mari kembali dan ubah definisi fungsi get_final_score untuk memperbaiki perilaku yang tidak diharapkan:

  • Fungsi get_final_score juga mengambil max_score sebagai parameter.
  • Kami memeriksa apakah bonus itu Benar. Jika Benar, kami menambahkan 10 poin ke variabel skor.
  • Kemudian, kami memeriksa apakah skor lebih besar dari skor_maksimum. Jika demikian, kami mengembalikan max_score.
  • Jika tidak, kami mengembalikan skor.
  Harga & Spesifikasi iPhone SE Baru & iPad Pro 9,7 Inci

Kami sekarang telah memastikan bahwa skor akhir selalu kurang dari atau sama dengan max_score.

def get_final_score(score,bonus,max_score):
    if bonus:
        score += 10
    if score > max_score:
        return max_score
    return score

Sebagai latihan singkat, tulis beberapa pernyataan untuk memastikan bahwa fungsi tersebut sekarang berfungsi seperti yang diharapkan.

Catatan tentang Pengecualian AssertionError

Meskipun pengecualian AssertionError terjadi saat ekspresi bernilai Salah, kita harus ingat untuk tidak menangani kesalahan seperti itu sebagai pengecualian. Berarti kita tidak boleh melakukan sesuatu seperti ini:

try:
    <doing this>
except AssertionError:
    <do this>

Pada contoh sebelumnya di get_final_score, kami menggunakan pernyataan untuk memeriksa apakah skor_akhir kurang dari skor_maks. Kemudian kami memodifikasi definisi fungsi sedemikian rupa sehingga tidak ada kesalahan pernyataan.

Itulah gunanya pernyataan. Itu adalah pemeriksaan kewarasan untuk kode, dan membantu dalam menulis kode pembersih. Penanganan pengecualian, di sisi lain, adalah untuk mengantisipasi dan menangani kesalahan tak terduga saat runtime. Ini sering termasuk jenis dan nilai input yang tidak valid.

Singkatnya, Anda harus menggunakan pernyataan Python assert untuk debugging yang efektif dan tidak menangani AssertionErrors sebagai pengecualian.

Kesimpulan

Tutorial ini membantu Anda memahami cara menggunakan pernyataan tegas di Python. Berikut ringkasan dari apa yang telah Anda pelajari:

  • Pernyataan penegasan Python (pernyataan) berbentuk pernyataan penegasan. Ini memeriksa apakah ekspresi itu Benar. Jika tidak bernilai True, pengecualian AssertionError dimunculkan.
  • Anda juga dapat menggunakan penegasan dengan sintaks penegasan ekspresi, pesan. Ini akan mencetak string pesan setiap kali terjadi pengecualian AssertionError.
  • Anda harus ingat untuk tidak menerapkan penanganan pengecualian untuk menangani kesalahan pernyataan. Dan gunakan pernyataan sebagai alat debug yang berguna untuk pemeriksaan kewarasan kode Anda.

Sebagai pengembang, pernyataan membantu Anda melakukan debug. Untuk memastikan semua komponen individual (modul) proyek berfungsi seperti yang diharapkan, Anda dapat mempelajari cara menulis pengujian unit dengan Python.

Selanjutnya, lihat daftar proyek Python pemula yang dapat Anda kerjakan.