Kursus Pembangunan Python Lanjutan
Bab
>
Tahap
Pengendalian Pengecualian
Mengakhiri Pengecualian
Objektif
Pergi ke pejabat dan pastikan bekalan wang seimbang dengan betul menggunakan blok kod finally dan kata kunci assert.
Di dalam tingkat dua, terdapat sebuah pejabat yang dikhaskan untuk menyimpan dana bagi pelaburan masa hadapan untuk ladang. Sudah tiba masanya untuk memeriksa dan memastikan semua buku kewangan seimbang. Apabila berurusan dengan nombor, kesilapan matematik dan isu lain pasti berlaku, jadi sekali lagi pengendalian pengecualian adalah satu idea yang baik untuk menangkap dan menyelesaikan kesilapan.
Selain blok kod try / except dan else, terdapat juga blok kod finally yang membolehkan anda menyelesaikan pengecualian. Selain itu, kata kunci assert adalah ciri penyahpepijatan yang membolehkan anda mengimbas jika kod mempunyai sebarang kesalahan supaya anda boleh membetulkan kod yang rosak.
Mulakan dengan berjalan ke tanda X ringan di hadapan pintu pejabat dan menggunakan fungsi open() untuk membuka pintu dan masuk. Setelah berada di dalam, pergi ke tanda X emas dan gunakan fungsi collect() untuk mengambil dua pemalar berbeza yang dinamakan: categories dan savings. Pemalar categories adalah senarai yang menyimpan bekalan wang bagi tiga kategori, yang dinamakan: "exports", "imports", "stock", yang perlu disahkan. Pemalar savings adalah pembolehubah yang menyimpan bekalan wang yang mungkin diperlukan untuk memastikan peti simpanan dipenuhi dengan betul.
Sekarang setelah semua item yang diperlukan telah dikumpulkan, tiba masanya untuk menyelaraskan bekalan wang yang disimpan dalam karung yang akan dikumpulkan dan diagihkan oleh seorang kerani selepas anda selesai. Berjalan ke tanda X gelap di atas karpet blue, untuk tanda X di atas karpet blue, yellow dan red. Di sini, kita akan menggunakan senarai pemalar categories untuk mengesahkan bahawa setiap karung mempunyai semua komponen yang diperlukan sebelum dihantar.
Setiap karung sepatutnya mengandungi komponen yang terdapat dalam senarai categories. Terdapat tiga pemalar kamus yang sepadan dengan setiap karung: blue_sack, yellow_sack dan red_sack. Jalankan gelung for sambil berdiri di tanda X di atas karpet blue untuk mengesahkan bahawa karung itu mempunyai semua bahan yang diperlukan kemudian sahkan bahawa bekalan telah direkodkan.
for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")
Beberapa karung sepatutnya mempunyai semua bahan yang diperlukan, tetapi seperti biasa dalam latihan ini, anda mungkin akan menghadapi satu kesilapan. Jika anda menjumpai masalah, anda mesti menggunakan blok kod try / except untuk menangkap ralat tersebut, dalam kes ini ialah KeyError: yang berlaku jika kekunci dalam kamus tidak ditemui. Apabila ini berlaku, kita juga menambah finally kepada pengecualian, yang membungkus pengecualian dengan menambah kod yang sentiasa dilaksanakan di penghujung setiap pengendalian pengecualian. Tidak seperti pengecualian lain, hanya satu blok finally dibenarkan untuk setiap try. Sebagai contoh, dalam kes 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")
Ulang proses ini pada tanda X gelap di atas karpet yellow dan red, menggunakan pemalar kamus yellow_sack dan red_sack. Mungkin tidak perlu dalam beberapa kes kerana kesalahan berlaku hanya jika terdapat item yang hilang dalam karung.
Setelah karung disahkan, tiba masanya untuk beralih kepada peti di hadapan karpet green, purple dan orange. Di sini, kita mesti memastikan bekalan wang adalah tepat 30 dalam setiap peti dan kemudian ditutup selepasnya. Terdapat tiga pemalar pembolehubah yang sepadan dengan setiap peti, dinamakan: green_chest, purple_chest, dan orange_chest.
Isu terbesar dalam mengesahkan peti ialah kita tidak mengetahui kandungan tepatnya; apabila anda berurusan dengan nilai yang tidak diketahui, anda boleh menggunakan kata kunci assert. Kata kunci ini membolehkan anda mengesahkan sama ada kenyataan yang anda isytiharkan adalah benar atau salah, ini sangat berguna untuk mengimbas jika kod anda mempunyai sebarang kesilapan. Kata kunci assert digunakan bersama-sama dengan: try, except, else dan final serta pelbagai kombinasi mereka untuk membetulkan kod yang mempunyai kesalahan. Sebagai contoh, dalam kes 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 kod di atas, kita mengesahkan sama ada green_chest mengandungi jumlah bekalan wang yang betul menggunakan kata kunci assert. Jika ia tidak mengandungi jumlah yang betul, blok except akan dicetuskan dan kita mengira kemudian menolak bekalan yang hilang dari pembolehubah savings dan menambahnya ke dalam peti. Jika bekalan adalah lengkap, blok else dicetuskan dan disahkan bahawa semua aset telah direkodkan. Setelah segala-galanya disahkan, blok finally dilaksanakan dan fungsi close() dimulakan untuk menutup peti.
Di atas tanda X pada karpet green, purple dan orange, hadaplah peti-peti tersebut dan jalankan pengesahan menggunakan: green_chest, purple_chest, orange_chest pada karpet dengan warna yang bersesuaian. Setelah selesai, berjalanlah ke tanda X ringan dan gunakan fungsi place() untuk menyimpan baki pembolehubah savings ke dalam peti simpanan untuk menyelesaikan tahap ini.