Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye
İstisna Yönetimi
Özel İstisna Sınıflarını Özelleştirme
Amaç
Toplanan yağmur suyunu doğrulayın ve doğru şekilde işlendiğinden ve aktarıldığından emin olmak için özel durum sınıflarını özelleştirin.
Çatı kompleksinin en ucunda, toplanan yağmur suyundan oluşan bir sarnıç bulunmaktadır; bu su filtrelenir ve çeşitli amaçlarla bina genelinde aktarılır. Üst duvardaki bazı vanalar akan su basıncını kontrol ederken, son depo çeşitli su ısıtıcılarını barındırır. Makine çalıştırmak karmaşık olabilir; ancak hata kodlarını belirleyip etkili önlemler alarak işlemleri verimli hale getirebilirsiniz. Bu, kendi özel durumlarınız için oluşturduğunuz özel durum sınıflarını özelleştirerek gerçekleştirilir.
Kod düzenleyicide iki özel durum sınıfı tanımlanmıştır; bunları kullanma beceriniz, karşılaşacağınız makine sorunlarını gidermede hayati öneme sahiptir. İlki, su basıncını çözümlemek için kullanılan bir özel durumdur. Bu, suyun kompleks içerisine düzgün bir şekilde akmasını veya basıncın ayarlanması gerekip gerekmediğini kontrol etmek amacıyla vanalarla birlikte kullanılır. Basınç 100'ün altında veya 300'ün üzerinde olduğuna bağlı olarak, özel durum farklı bir işlem gerçekleştirir; basınç, kullanıcının sağlaması gereken bir argümandır. Tetiklendiğinde, hata kodu ve mesajı içeren özel bir pencere açılır.
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")
İkinci özel durum sınıfı ise su ısıtıcılarındaki sıcaklığı düzenlemek içindir; sıcaklık çok düşük veya çok yüksek ise, hatayı düzeltmek için argüman olarak yeni bir sıcaklık değeri girmeniz gerekmektedir.
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")
Başlamak için, yeşil halı üzerindeki açık X işaretine yürüyün ve vana bulunan tankın karşısına geçin; sarnıçtan pompalanan suyun basıncını düzenleyen bunlardan dört (4) adet bulunmaktadır. Dört (4) değişken sabit vardır: green_pressure, red_pressure, blue_pressure ve orange_pressure; bunlar, ilgili renkli halılara karşılık gelen tankların basıncını tutar.
Tüm açık X işaretlerinde, her tanktaki basıncın uygun olup olmadığını kontrol etmek için try/except ve else kod bloğu dizilerini kullanın. Basınç 100'ün altında veya 300'ün üzerinde ise, özel PressureError istisnasını tetikleyin ve basıncı argüman olarak ekleyin. Tetiklendiğinde, hata kodunu gösterip düzeltme işlemi yapar; aksi halde, else bloğu çalışarak tanktaki basıncın uygun olduğunu onaylar. Örneğin:
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" )
Bunu, ilgili renkteki halılara karşılık gelen değişken sabitlerini kullanarak tüm açık X işaretlerinde yapın ve gerektiğinde basınç vanalarını kontrol edin ya da ayarlayın.
İşlemi tamamladıktan sonra, altın X işaretine gidin ve su ısıtıcısının bulunduğu depoya erişmek için open() fonksiyonunu kullanın. Depoya girdikten sonra, depo içindeki altın X işaretine yürüyün ve tepsideki notu okumak için read() fonksiyonunu kullanın. Bu not, her bir su ısıtıcısı için ideal sıcaklık hakkında bilgi verecektir.
Her bir ısıtıcı için sıcaklık bilgilerine sahip olduktan sonra, mor halı üzerindeki koyu X işaretine ilerleyin; burada, su ısıtıcılarının doğru sıcaklıkta olup olmadığını kontrol etmek için try/except ve else kod dizisini kullanacağız. Renkli halılarla ilişkili dört (4) ek değişken sabit bulunur: purple_temperature, yellow_temperature, pink_temperature ve white_temperature.
Dizide, sıcaklığın 100'ün altında olup olmadığını kontrol edeceğiz; eğer öyleyse TemperatureError istisnasını tetikleyeceğiz. Özelleştirilmiş bir istisna olarak, bir argüman alır; bu durumda, notta okunan sıcaklığı girerek hatayı düzeltmek için gerekli önlemi doğru şekilde uygulamanız gerekmektedir. Örneğin:
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" )
Tüm su ısıtıcıları için, ısıtıcılara bakarken her X işaretinde, doğru renkteki halılara karşılık gelen değişken sabitleriyle bu diziyi çalıştırarak bölümü tamamlayın.