Kursus Pengembangan Python Lanjutan
Bab
>
Tingkat
Penanganan Pengecualian
Mengakhiri Sebuah Pengecualian
Tujuan
Pergi ke kantor dan pastikan pasokan uang seimbang dengan menggunakan blok kode finally dan keyword assert.
Di lantai dua, sebuah kantor didedikasikan untuk menyimpan dana investasi masa depan untuk pertanian. Sudah waktunya untuk memeriksa dan memastikan bahwa semua buku sudah seimbang. Saat berurusan dengan angka, kesalahan matematika dan masalah lainnya pasti terjadi sehingga sekali lagi penanganan exception adalah ide yang baik untuk menangkap dan menyelesaikan kesalahan.
Selain blok kode try / except dan else, ada juga blok kode finally yang memungkinkan kamu untuk menuntaskan sebuah exception. Selain itu, keyword assert adalah fitur debug yang memungkinkan kamu memeriksa apakah sebuah kode memiliki kesalahan sehingga kamu dapat memperbaiki kode yang buruk.
Mulailah dengan berjalan ke tanda X cahaya di depan pintu kantor dan menggunakan fungsi open() untuk membuka pintu agar dapat masuk. Setelah masuk, menujulah ke tanda X emas dan gunakan fungsi collect() untuk mengambil dua konstanta berbeda yang bernama: categories dan savings. Konstanta categories adalah sebuah list yang menyimpan pasokan uang dari tiga kategori, yang dinamai: "exports", "imports", "stock", yang perlu diverifikasi. Konstanta savings adalah sebuah variabel yang menyimpan pasokan uang yang mungkin diperlukan untuk memastikan kas terisi dengan baik.
Sekarang setelah semua item yang diperlukan telah dikumpulkan, saatnya menyeimbangkan pasokan uang yang disimpan dalam karung yang akan dikumpulkan dan didistribusikan oleh seorang petugas setelah kamu selesai. Berjalanlah ke tanda X gelap di atas karpet biru, untuk tanda X di atas karpet biru, kuning, dan merah. Di sini kita akan menggunakan konstanta list categories untuk memverifikasi bahwa setiap karung memiliki semua komponen yang diperlukan sebelum dikirim.
Setiap karung seharusnya berisi komponen yang ada di dalam list categories. Ada tiga konstanta dictionary yang sesuai dengan setiap karung: blue_sack, yellow_sack, dan red_sack. Jalankan loop for sambil berdiri di tanda X di atas karpet biru untuk memverifikasi bahwa karung tersebut memiliki semua materi yang diperlukan kemudian konfirmasikan bahwa pasokan telah tercatat.
for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")
Beberapa karung seharusnya memiliki semua materi yang diperlukan, tetapi seperti biasanya dalam latihan ini, kamu mungkin menemukan kesalahan. Jika kamu menemui masalah, kamu harus menggunakan blok kode try / except untuk menangkap kesalahan, dalam hal ini KeyError: yang terjadi jika sebuah key dictionary tidak ditemukan. Ketika hal ini terjadi, kita juga menambahkan finally ke dalam exception, yang menyelesaikan exception dengan menambahkan kode yang selalu dijalankan di akhir setiap penanganan exception. Tidak seperti exception, hanya bisa ada satu blok finally per try. Sebagai contoh, dalam kasus blue_sack:
try: for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) except: player.speak("Bag is missing %s, adding now" % (categories[x])) player.place(categories[x]) finally: player.speak("All assets accounted for")
Ulangi proses ini di tanda X gelap di atas karpet kuning dan merah, menggunakan konstanta dictionary yellow_sack dan red_sack. Mungkin tidak perlu dalam beberapa kasus karena kesalahan hanya terjadi jika ada item yang hilang di dalam karung.
Sekarang setelah karung diverifikasi, saatnya untuk beralih ke peti-peti di depan karpet: hijau, ungu, dan oranye. Di sini kita harus memastikan pasokan uang tepatnya 30 di setiap peti dan kemudian ditutup setelahnya. Ada tiga konstanta variabel yang sesuai dengan setiap peti, yang dinamai: green_chest, purple_chest, dan orange_chest.
Masalah terbesar dalam memverifikasi peti adalah kita tidak mengetahui isi pastinya, saat kamu berurusan dengan nilai yang tidak diketahui kamu dapat menggunakan keyword assert. Keyword ini memungkinkan kamu memverifikasi apakah sebuah pernyataan yang kamu deklarasikan itu benar atau salah, ini sangat berguna untuk memeriksa apakah kode kamu memiliki kesalahan. Keyword assert digunakan bersama dengan: try, except, else dan final serta kombinasi-kombinasinya untuk memperbaiki kode yang memiliki kesalahan. Sebagai contoh, dalam kasus green_chest:
try: assert(green_chest = 30) except AssertionError: player.speak("Chest is not full %s/30" % green_chest) drop = 30-green_chest savings -= drop player.place(drop) else: player.speak("All assets accounted for") finally: player.close()
Dalam kode di atas kita memverifikasi apakah green_chest berisi pasokan uang yang tepat dengan menggunakan keyword assert. Jika tidak berisi jumlah yang tepat, blok except akan terpancing dan kita menghitung kemudian mengurangkan pasokan yang hilang dari variabel savings dan menambahkannya ke dalam peti. Jika pasokan lengkap, blok else terpancing dan dikonfirmasi bahwa semua aset telah tercatat. Setelah semuanya diverifikasi, blok finally dieksekusi dan fungsi close() dijalankan untuk menutup peti.
Di tanda X di atas karpet hijau, ungu, dan oranye, hadaplah peti-peti tersebut dan jalankan verifikasi menggunakan: green_chest, purple_chest, orange_chest pada karpet dengan warna masing-masing. Setelah selesai, berjalanlah ke tanda X cahaya dan gunakan fungsi place() untuk menyimpan sisa variabel savings dalam peti kayu guna menyelesaikan level.