Kursus Pembangunan Python Lanjutan
Bab
>
Tahap

Pengendalian Pengecualian
Menyesuaikan Kelas Pengecualian

Objektif

Sahkan air hujan yang dikumpul dan pastikan ia diproses dan dipindahkan dengan betul dengan menyesuaikan kelas pengecualian.

Di hujung kompleks bumbung terdapat sebuah tangki penampan air hujan yang dikumpul, air ini ditapis dan dipindahkan ke seluruh bangunan untuk pelbagai tujuan. Beberapa injap di dinding atas mengawal tekanan air yang mengalir, sementara ruang simpanan terakhir menyimpan pelbagai pemanas air. Mengendalikan jentera boleh menjadi sukar namun operasi mereka boleh dipermudahkan dengan menyenaraikan kod ralat dan menetapkan langkah-langkah penyelesaian yang berkesan. Ini dicapai dengan menyesuaikan kelas pengecualian yang anda cipta untuk pengecualian tersuai anda.

class PressureError(Exception): def __init__(self, pressure, message="Water pressure is offset, pressure is: ", error_code=404): self.pressure = pressure self.message = message self.error_code = error_code super().__init__(self.message) async def eval(self): await player.display("[Error: %s {%s %s}]" % (self.error_code , self.message, self.pressure)) if self.pressure < 100: return ("Valve has been closed") if self.pressure > 360: return ("Valve has been opened")

Kelas pengecualian tersuai kedua direka untuk mengawal suhu dalam pemanas air, jika suhu terlalu rendah atau terlalu tinggi anda mesti memasukkan suhu baru sebagai argumen untuk membetulkan ralat tersebut sebaik sahaja ia berlaku.

class TemperatureError(Exception): def __init__(self, temp, message="Temperature is not appropiate, enter new temperature: ", error_code=808): self.temp = temp self.message = message self.error_code = error_code super().__init__(self.message) async def eval(self): await player.display("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp)) return ("Temperature Corrected")

Untuk memulakan, berjalan ke tanda X ringan di atas permaidani hijau dan hadapkan ke tangki dengan injap, terdapat empat (4) yang mengawal tekanan air yang dipam dari tangki penampan. Terdapat empat (4) pemalar pembolehubah: green_pressure , red_pressure , blue_pressure dan orange_pressure , yang menyimpan tekanan bagi setiap tangki permaidani yang berwarna sepadan.

Pada semua tanda X ringan, gunakan urutan blok kod try/except dan else untuk mengesahkan sama ada tekanan pada setiap tangki adalah sesuai. Jika tekanan adalah di bawah 100 atau di atas 300, tingkatkan pengecualian tersuai PressureError dan sertakan tekanan sebagai argumen. Jika diaktifkan, ia akan mengeluarkan kod ralat dan memberikan pembetulan, jika tidak, klausa else dicetuskan untuk mengesahkan bahawa tekanan dalam tangki adalah sesuai. Sebagai contoh:

try: if green_pressure < 100 or green_pressure > 360: raise PressureError(green_pressure) except PressureError as x: error = await x.eval() player.speak(error) else: player.speak( "Pressure is appropriate" )

Lakukan ini pada semua tanda X ringan, menggunakan pemalar pembolehubah yang sepadan dengan setiap permaidani berwarna dan sama ada mengesahkan atau melaraskan injap tekanan mengikut keperluan.

Setelah selesai, berjalan ke tanda X emas dan gunakan fungsi open() untuk mengakses ruang simpanan dengan pemanas air, sebaik sahaja di dalam, berjalan ke tanda X emas yang berada dalam ruang simpanan dan gunakan fungsi read() untuk membaca memo di kaunter. Memo ini akan memberikan anda maklumat mengenai suhu ideal bagi setiap pemanas air.

Setelah anda mendapat maklumat mengenai setiap suhu, berjalan ke tanda X gelap di atas permaidani ungu, di sini kita akan menggunakan urutan kod try/except dan else untuk mengesahkan bahawa pemanas air berada pada suhu yang betul. Terdapat empat (4) lagi pemalar pembolehubah yang berkaitan dengan permaidani berwarna: purple_temperature , yellow_temperature , pink_temperature dan white_temperature.

Dalam urutan tersebut, kita akan mengesahkan sama ada suhu adalah di bawah 100, jika ya, kita akan meningkatkan pengecualian TemperatureError. Sebagai pengecualian tersuai, ia mengambil satu argumen, dalam kes ini anda mesti memasukkan suhu yang dibaca dalam memo untuk melaksanakan langkah penyelesaian pengecualian dengan betul bagi membetulkan isu tersebut. Sebagai contoh:

try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: error = await x.eval() player.speak(error) else: player.speak( "Temperature is ok" )

Lakukan ini untuk semua pemanas air, pada setiap tanda X ketika menghadap pemanas, laksanakan urutan menggunakan pemalar pembolehubah yang sepadan dengan permaidani berwarna yang betul untuk menyelesaikan tahap tersebut.

Buku Kod