Kursus Pembangunan Python Lanjutan
Bab
>
Tahap
Pengendalian Pengecualian
Pengecualian Berganda
Objektif
Kumpul dan simpan bekalan perubatan dengan betul ke dalam peti dengan menggunakan pelbagai pengecualian.
Gudang di bumbung perlu diisi semula, sebahagian daripada bekalan telah digunakan tetapi tidak pernah digantikan. Terdapat pesanan untuk bahan-bahan tambahan dalam satu memo di salah satu storeroom, adalah idea yang baik untuk menyelesaikannya. Walau bagaimanapun, terdapat pelbagai bahan berbeza yang perlu digabungkan dan disimpan dalam peti.
Disebabkan jenis data yang berbeza dan bilangan bahan yang diperlukan untuk mengisi peti, kita boleh menghadapi pelbagai kesalahan. Kita boleh menggunakan try / except untuk menangkap sebarang kesalahan yang mungkin berlaku dan menyelesaikan beberapa isu, tetapi apa yang berlaku apabila terdapat pelbagai kesalahan yang mungkin ditemui dalam satu operasi? Untuk mengatasinya, kita boleh menyatakan pengecualian mana yang kita cuba tangkap dan menggunakan pelbagai pengecualian.
Sebagai permulaan, berjalan ke tanda X emas dan hadap pintu, gunakan fungsi open() untuk memasuki storeroom. Setelah berada di dalam, berjalan ke tanda X gelap dan berpaling ke kanan untuk menggunakan fungsi read() dan periksa bahan dan kuantiti yang dipesan dalam memo di atas meja. Maklumat tentang konstanta senarai ditulis dalam memo, termasuk bekalan dan pesanan mereka. Setelah selesai, berjalan ke tanda X terang di dalam storeroom, berpaling ke peti dan ambil konstanta senarai pads bahan di dalam menggunakan fungsi collect(), seperti ini: player.collect(pads).
Di dalam gudang terdapat stor "peroxide" dan "isopropyl", berjalan dan kumpulkan semuanya kemudian keluar dan menuju ke tanda X gelap di atas karpet ungu. Di atas karpet ungu, sambil menghadap peti, gunakan fungsi collect() untuk mengambil "water bottle", teruskan ke tanda X gelap di atas karpet kuning dan gunakan fungsi collect() untuk mengambil "glass bottle".
Kini selepas barang-barang dikumpulkan, tiba masanya untuk memenuhi pesanan dan meletakkan semua bahan ke dalam peti stor gudang di sebelah kanan. Untuk melakukan ini, kita akan terlebih dahulu menyimpan: "water bottle", "peroxide", dan "isopropyl" ke dalam sebuah senarai bernama supplies. Di tanda X gelap di atas karpet red, green dan blue, kita akan menggunakan peti untuk menyimpan bekalan perubatan. Untuk ini, kita akan menyediakan tiga senarai: blue_crate = [], green_crate = [] dan red_crate = [].
Sebelum meletakkan semua barang, kita mesti mengisi semua senarai dengan bahan-bahan tersebut, untuk ini kita akan menggunakan gelung untuk iterasi melalui senarai dan menggabungkan mereka ke dalam satu senarai tunggal. Ini akan meletakkan semua supplies dalam senarai dan akan membahagikan bilangan item pads mengikut order dalam memo di storeroom.
for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])
Walaupun begitu, anda akan perhatikan bahawa kesalahan akan muncul, walaupun semuanya telah dilakukan dengan betul dan kod adalah kukuh. Namun, berikut adalah isu, senarai supplies hanya mempunyai tiga (3) item, tetapi gelung dijalankan sebanyak lima (5) kali menyebabkan Index Error. Sementara itu, bagi senarai pads bukan sahaja ia juga hanya mempunyai tiga (3) item tetapi juga salah satu nilai pesanan adalah 0, mana-mana nombor dibahagi dengan 0 akan menyebabkan Zero Division Error kerana tiada nombor yang boleh dibahagi dengan 0 dalam matematik.
Di sinilah pelbagai pengecualian sangat berguna, kita menggunakan blok kod try / except untuk menangkap kesalahan dan membenarkan kita meneruskan kod. Memandangkan terdapat dua kesalahan yang berlaku, kita mesti mengenal pasti setiap kesalahan untuk menangkap pengecualian spesifik tersebut. Ini dilakukan dengan memperluas blok kod except dengan cara ini: except IndexError: dan except ZeroDivisionError:. Sebagai contoh:
for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)
Index Error diselesaikan dengan mengisi tempat yang hilang dalam senarai dengan "glass bottle" dan Zero Division Error diatasi dengan menambah nilai 0 jika tindakan yang tidak sah berlaku.
Lakukan ini untuk senarai blue_crate = [], green_crate = [] dan red_crate = []. Berjalan ke tanda X gelap di atas karpet blue, green dan red dan gunakan fungsi place() untuk menyimpan senarai dalam peti yang sepadan bagi menyelesaikan tahap tersebut.