Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye
İstisna İşleme
İstisna Sınıflarını Özelleştirme
Amaç
Toplanan yağmur suyunu doğrulayın ve özel istisna sınıflarını özelleştirerek suyunun doğru işlendiğini ve aktarıldığını garanti altına alın.
Çatı kompleksinin en uç noktasında, toplanan yağmur suyunu içeren bir su deposu bulunmaktadır; bu su filtrelenir ve binanın çeşitli amaçları için aktarılır. Üst duvardaki bazı vanalar, akan suyun basıncını kontrol eder; bu arada son depo, çeşitli su ısıtıcılarını barındırır. Makineyi çalıştırmak zor olabilir; ancak hata kodlarını belirleyip etkili önlemler uygulayarak, işlemler etkin bir şekilde düzene sokulabilir. Bu, özel istisnalarınız için oluşturduğunuz özel istisna sınıflarını özelleştirerek başarılır.
Kod editöründe iki adet özel istisna sınıfı oluşturulmuştur; bu sınıfları kullanabilmeniz, karşılaşabileceğiniz makine sorunlarını gidermek açısından çok önemlidir. İlki, su basıncını gidermek için kullanılan bir istisnadır. Vanalarla birlikte, suyun kompleks içine düzgün aktığını ya da basıncın ayarlanması gerektiğini kontrol etmek için kullanılmalıdır. Basınç 100'ün altında veya 300'ün üzerinde olduğunda, istisna farklı bir işlem gerçekleştirir; basınç, kullanıcının sağlaması gereken bir argümandır. Bir kez tetiklendiğinde, hata kodu ve mesaj içeren özel bir açılır pencere görüntülenir.
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 __str__(self):
await player.write("[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 istisna sınıfı, su ısıtıcılarındaki sıcaklığı düzenlemek içindir; eğer sıcaklık çok düşük veya çok yüksekse, hatayı düzeltebilmek için yeni bir sıcaklık değerini argüman olarak 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 __str__(self):
await player.write("[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 gidin ve vanalı tankın karşısına geçin; bu tanklardan, su deposundan pompalanan suyun basıncını düzenleyen dört (4) tanesi bulunmaktadır. Dört (4) değişken sabit vardır: green_pressure, red_pressure, blue_pressure ve orange_pressure; bunlar, ilgili renkteki halılara ait tanklardaki basıncı saklar.
Tüm açık X işaretlerinde, her tanktaki basıncın uygun olup olmadığını doğrulamak için try/except ve else kod bloğu dizilerini kullanın. Basınç 100'ün altındaysa veya 300'ün üzerindeyse, özel PressureError istisnasını yükseltin ve basıncı argüman olarak ekleyin. Eğer tetiklenirse, hata kodu yükselir ve bir düzeltme yapılır; aksi halde, else bloğu tanktaki basıncın uygun olduğunu teyit eder. Örneğin:
try: if green_pressure < 100 or green_pressure > 360: raise PressureError(green_pressure) except PressureError as x: player.speak(x) else: player.speak( "Pressure is appropriate" )
Bunu, her renkteki halıya karşılık gelen değişken sabitlerini kullanarak tüm açık X işaretlerinde yapın ve gerekirse basınç vanalarını doğrulayın veya ayarlayın.
İşlemi tamamladıktan sonra, altın X işaretine gidin ve su ısıtıcısının bulunduğu depo odasına erişmek için open() fonksiyonunu kullanın; içerideyken, depo odası içindeki altın X işaretine gidin ve tezgah üzerindeki notu okumak için read() fonksiyonunu kullanın. Bu not, her su ısıtıcısı için ideal sıcaklık hakkında bilgi verecektir.
Her bir sıcaklık bilgisine sahip olduktan sonra, mor halı üzerindeki koyu X işaretine gidin; burada, su ısıtıcılarının doğru sıcaklıkta olduğunu doğrulamak için try/except ve else kod dizisini kullanacağız. Renkli halılara ait dört (4) ilave değişken sabit vardır: 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ı yükselteceğiz. Özel bir istisna olarak, bir argüman alır; bu durumda, hatayı düzeltmek için nottaki okunan sıcaklık değerini girmeniz gerekmektedir. Örneğin:
try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: player.speak(x) else: player.speak( "Temperature is ok" )
Tüm su ısıtıcıları için bunu yapın; ısıtıcıların karşısında bulunan her X işaretinde, seviyeyi tamamlamak için doğru renkteki halıya ait değişken sabitlerini kullanarak diziyi uygulayın.