上級Python開発コース
チャプター
>
レベル

例外処理
例外クラスのカスタマイズ

目的

集めた雨水が正しく処理・移送されているかを、例外クラスのカスタマイズによって確認せよ。

屋根複合施設の最も遠い場所に、集められた雨水の貯水槽があります。この水はフィルターで濾過された後、建物内の様々な用途に移送されます。上部の壁にあるいくつかのバルブが流れる水圧を制御しており、一方で最後の貯蔵室には様々な温水器が設置されています。機械の操作は難しい場合がありますが、エラーコードの整理と効果的な対策の設定により、その動作を効率化することが可能です。これは、カスタム例外のために作成する例外クラスをカスタマイズすることで実現されます。

コードエディタには2つのカスタム例外クラスが設定されています。これらを使用する能力が、機械の問題のトラブルシューティングにおいて不可欠となります。最初の例外は水圧のトラブルシューティング用です。これは、バルブと共に使用され、建物内への水の流入や水圧の調整が必要かどうかを確認するためのものです。水圧が 100 未満または 300 を超える場合、例外によって異なる処理が行われます。水圧はユーザーが提供する引数です。トリガーされると、エラーコードとメッセージを含むカスタムポップアップが表示されます。

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")

2番目のカスタム例外クラスは、温水器の温度を調整するためのものです。温度が低すぎる場合や高すぎる場合、エラーを修正するためにメモに記載された新しい温度を引数として入力する必要があります。

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")

まずは、緑のカーペット上のライト X マークまで歩いて、バルブのあるタンクに向かいます。システムには、貯水槽から水をポンプで送る際の水圧を調整するための4つのバルブがあります。4つの変数定数、green_pressurered_pressureblue_pressureorange_pressure は、それぞれ対応する色のカーペットのタンクの水圧を保持しています。

全てのライト X マークで、try /except および else のコードブロックシーケンスを使用して、各タンクの水圧が適切かどうかを確認してください。水圧が 100 未満または 300 を超えている場合は、カスタム例外 PressureError を発生させ、引数として水圧を渡します。例外が発生するとエラーコードが表示され、修正が行われます。そうでない場合は else 節が実行され、タンクの水圧が適切であることが確認されます。例として:

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" )

各ライト X マークで、対応する色のカーペットに対応する変数定数を使用して、水圧の検証または調整を行ってください。

処理が終わったら、金色の X マークまで歩いて、open() 関数を使って温水器のある貯蔵室にアクセスしてください。室内に入ったら、貯蔵室内の金色の X マークまで歩き、read() 関数を使用してカウンターのメモを読みます。このメモには、各温水器の理想的な温度に関する情報が記されているはずです。

各温水器の温度情報を得たら、紫のカーペット上の暗い X マークまで歩いてください。ここでは、try/except および else のコードシーケンスを使用して、温水器の温度が適切かどうかを確認します。紫、黄、ピンク、白の各カーペットに対応する4つの変数定数、purple_temperatureyellow_temperaturepink_temperaturewhite_temperature が用意されています。

このシーケンスでは、温度が 100 未満かどうかを確認し、もしそうであれば TemperatureError の例外を発生させます。このカスタム例外は引数を取ります。今回の場合、メモで読んだ温度を正しく例外の対策として実行するために入力しなければなりません。例として:

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" )

各温水器についてこれを実行し、各 X マークで温水器に向かって、対応する色のカーペットの変数定数を使用してシーケンスを実行し、レベルを完了させてください。

コードブック