Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye
İstisna İşleme
Özel İstisnalar
Amaç
Ürün siparişleriyle ilgili mesajları toplamak ve taşıyıcı güvercin aracılığıyla göndermek için özel durumları kullanın.
Bazı mesajlar çiftlik ve diğer istasyonlar arasında elçi güvercin ile dağıtılıyor, bu yüzden zaman çizelgesinin önünde kalmak için birkaçını göndermek iyi bir fikir olacaktır. Yaygın özel durumlar kullanarak hataları yakalıyorduk, ancak bazı çok özel senaryolar için kendi özel durumlarınızı oluşturmanın faydasını görebilirsiniz. Doğru öğeleri belirlemek için kendi özel durumlarımızı kullanarak mesajları temin edecek ve güvercinleri seçeceğiz.
Özel durumlar, sınıflar oluşturularak hazırlanır; (Exception) ifadesi eklenerek bir sınıf, özel durumları yürütmek için yeniden kullanılabilir hale getirilebilir. Amacımız doğrultusunda iki tane oluşturacağız: belirli bir dize doğrulamadan geçmediğinde etkinleştirilen InvalidLocation ve bir sayının belirli bir eşik değeri aşıp aşmadığını kontrol etmek için kullanılan UnsuitableSelection.
class InvalidLocation(Exception):
"Raised when location is invalid"
pass
class UnsuitableSelection(Exception):
"Raised when pidgeon is 2 or younger"
pass
Sınıflar oluşturulduğuna göre, şimdi gönderilmek üzere mesajları temin etme zamanı. Yaklaşan değişim için gerekli bileşenleri saklamak ve birleştirmek amacıyla prep adında bir liste oluşturun. Kırmızı halının üzerindeki karanlık X işaretine doğru yürüyün, önündeki masaların üzerindeki X işaretli sıralarda batı sektörüne gidecek siparişlerin bulunduğu mesajları arayacağız.
Bu bölümde kullanılan dört sabit değişken vardır: red_memo, blue_memo, green_memo ve orange_memo. Yalnızca teslim edilmek üzere "west" sektörüne işaretlenmiş mesajlar toplanacaktır. Mesajın alınıp alınmayacağına karar vermek için try/except ve else kod bloklarını InvalidLocation özel durumu ile birlikte kullanacağız. Özel durumu kullanmak için, try bloğunda mesajın "west" olarak etiketlenip etiketlenmediğini kontrol edin ve eğer değilse istisnayı yükseltin. except bloğu mesajın geçersiz olduğunu doğrular ve else bloğu, mesajın gerçekten "west" sektörüne gideceğini tespit ederse, mesajı toplayarak prep listesine ekler. Örneğin:
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)
Masaların önündeki renkli halıların üzerindeki her karanlık X işaretine gidin ve her renk için karşılık gelen sabit değişkenleri kullanarak istisna dizisini çalıştırın.
Mesajları topladıktan sonra, kapının önündeki altın X işaretine gidin ve güvercin kümesindeki erişimi sağlamak için open() fonksiyonunu kullanın. İçeri girdikten sonra ışık X işaretine doğru yürüyün, etrafınıza bakın ve güvercinlerin kaçmamasını sağlamak için kapıyı kapatmak üzere close() fonksiyonunu kullanın.
Mor halının üzerindeki karanlık X işaretine gidin; kalemlerin bulunduğu yerde güvercinin mesajı iletmek için yeterince yaşlı olup olmadığını ya da teslimatı gerçekleştiremeyecek kadar yavru olup olmadığını kontrol edeceğiz. Bu bölümde ayrıca dört sabit değişken daha kullanılacaktır: purple_pen, yellow_pen, white_pen ve pink_pen, her biri ilgili renkli halıya karşılık gelmektedir. Mesajlarda olduğu gibi aynı tekniği, oluşturduğumuz ikinci sınıfı kullanarak uygulayacağız.
UnsuitableSelection özel durumu ile try/except ve else kod bloklarını kullanarak güvercinin mesajı iletmek için yeterince yaşlı olup olmadığını belirleyin. try bloğu, kalemi temsil eden sabit değişkenin, güvercinin iki (2)'den küçük olup olmadığını kontrol ederek uygun güvercin olup olmadığını doğrular. Eğer güvercin uygun değilse except bloğu tetiklenir; aksi halde else bloğu etkinleşir ve mesajı teslim etmek üzere güvercin prep listesine eklenir.
try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")
Renkli halıların üzerindeki her karanlık X işaretine gidin ve doğru renkli halıya karşılık gelen sabit değişkeni kullanarak bu diziyi uygulayın. Güvercinleri ve mesajları topladıktan sonra, en alttaki altın X işaretine gidin ve prep listesini kullanarak güvercinleri place() fonksiyonu ile gönderin; böylece mesajlar iletilip seviye tamamlanacaktır.