Kursus Pembangunan Python Lanjutan
Bab
>
Tahap
Pengendalian Pengecualian
Pengecualian Tersuai
Objektif
Gunakan pengecualian tersuai untuk mengumpul mesej dengan pesanan produk dan menghantarnya melalui burung merpati pos.
Beberapa mesej dihantar ke seluruh ladang dan stesen lain melalui burung merpati pos, dan adalah idea yang baik untuk menghantar beberapa untuk mendahului jadual. Kita telah menangkap ralat menggunakan pengecualian biasa, tetapi kadang-kadang anda mungkin mendapat manfaat daripada membuat pengecualian tersuai sendiri untuk senario yang sangat khusus. Kita akan mendapatkan mesej dan memilih burung merpati dengan mengenal pasti item yang betul menggunakan pengecualian tersuai kita sendiri.
Pengecualian tersuai disusun dengan membuat kelas, dengan menambah klausa (Exception) anda boleh menggunakan semula kelas untuk melaksanakan pengecualian. Untuk tujuan kita, kita akan membuat dua: InvalidLocation yang diaktifkan apabila rentetan tertentu tidak lulus pengesahan, dan UnsuitableSelection yang digunakan untuk memeriksa jika nombor melepasi ambang tertentu.
class InvalidLocation(Exception):
"Raised when location is invalid"
pass
class UnsuitableSelection(Exception):
"Raised when pidgeon is 2 or younger"
pass
Setelah kelas-kelas disediakan, tiba masanya untuk mendapatkan memo supaya ia dapat dihantar. Buat senarai bernama prep untuk menyimpan dan menggabungkan komponen-komponen yang diperlukan untuk pertukaran akan datang. Berjalanlah ke tanda X gelap di atas karpet merah, pada barisan meja dengan tanda X di hadapan, kita akan mencari memo yang mempunyai pesanan yang ditujukan ke sektor barat ladang.
Terdapat empat pemalar pemboleh ubah yang digunakan dalam bahagian ini: red_memo, blue_memo, green_memo dan orange_memo. Hanya memo yang ditandakan untuk dihantar ke sektor "west" yang akan dikumpulkan supaya ia dapat dihantar. Untuk menentukan sama ada kita mengambil memo itu atau tidak, kita akan menggunakan blok kod try/except dan else bersama pengecualian tersuai InvalidLocation. Untuk menggunakan pengecualian tersuai tersebut, biarkan blok try memeriksa jika memo tersebut dilabelkan "west" dan jika tidak, timbulkan pengecualian. Blok except mengesahkan bahawa memo tersebut tidak sah dan blok else mengumpul, serta menambah ke senarai prep, memo tersebut jika ternyata ia ditujukan ke sektor "west". Sebagai contoh:
try: if red_memo != "west": raise InvalidLocation except InvalidLocation: player.speak("This is not an order that needs to be sent out") else: player.collect(red_memo) prep.append(red_memo)
Berjalanlah ke setiap tanda X gelap di atas karpet berwarna di hadapan meja dan jalankan urutan pengecualian menggunakan pemalar pemboleh ubah yang sepadan bagi setiap warna.
Setelah anda mengumpul memo, berjalanlah ke tanda X emas di hadapan pintu dan gunakan fungsi open() untuk mengakses sangkar merpati. Setelah di dalam, berjalanlah ke tanda X terang, berputarlah, gunakan fungsi close() untuk menutup pintu bagi memastikan tiada merpati yang melarikan diri.
Berjalanlah ke tanda X gelap di atas karpet ungu, pada kandang-kandang kita akan mengesahkan jika burung merpati cukup tua untuk menghantar mesej atau jika ia masih anak yang tidak mampu membuat penghantaran. Terdapat empat lagi pemalar pemboleh ubah yang akan digunakan dalam bahagian ini: purple_pen, yellow_pen, white_pen dan pink_pen yang sepadan dengan setiap karpet berwarna. Kita akan menggunakan teknik yang sama seperti dengan memo, menggunakan kelas kedua yang telah disediakan.
Gunakan blok kod try/except dan else bersama pengecualian tersuai UnsuitableSelection untuk mengenal pasti jika burung merpati cukup tua untuk membuat penghantaran. Blok try mengesahkan jika pemalar pemboleh ubah yang mewakili kandang mempunyai burung merpati yang sesuai dengan memeriksa jika burung tersebut berumur kurang dari dua (2) tahun. Jika burung merpati tidak sesuai, blok except akan dicetuskan, sebaliknya blok else diaktifkan membenarkan anda menambah burung merpati ke senarai prep bagi menghantar mesej.
try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")
Pergi ke setiap tanda X gelap di atas karpet berwarna dan gunakan urutan ini dengan pemalar pemboleh ubah yang betul yang sepadan dengan karpet berwarna yang betul. Setelah anda mengumpul burung merpati dan mesej, berjalanlah ke tanda X emas di bahagian paling bawah dan gunakan fungsi place() dengan senarai prep yang telah anda buat untuk menghantar burung merpati bagi menyampaikan mesej dan menyelesaikan tahap.