Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ
Xử lý ngoại lệ
Tùy chỉnh các lớp ngoại lệ
Mục tiêu
Xác minh nước mưa đã thu thập được và đảm bảo rằng nó đang được xử lý và chuyển giao đúng cách bằng cách tùy chỉnh các lớp ngoại lệ.
Ở đầu cuối của khu phức hợp mái nhà, có một bể chứa nước mưa thu thập được, nước này được lọc và chuyển qua toàn bộ tòa nhà cho nhiều mục đích khác nhau. Một số van trên tường phía trên kiểm soát áp lực nước chảy, trong khi đó phòng chứa kho cuối cùng chứa các máy nước nóng khác nhau. Vận hành máy móc có thể khá khó khăn, tuy nhiên hoạt động của chúng có thể được tối ưu hóa hiệu quả bằng cách phác thảo mã lỗi và thiết lập các biện pháp khắc phục hiệu quả. Điều này được thực hiện bằng cách tùy chỉnh các lớp ngoại lệ mà bạn tạo ra cho các ngoại lệ tùy chỉnh của mình.
Có hai lớp ngoại lệ tùy chỉnh được thiết lập trong trình chỉnh sửa mã, khả năng sử dụng chúng của bạn sẽ là yếu tố thiết yếu để khắc phục mọi sự cố máy móc bạn gặp phải. Lớp đầu tiên là một ngoại lệ để khắc phục áp lực nước. Nó được định nghĩa để sử dụng với các van nhằm đảm bảo nước chảy đúng cách vào khu phức hợp hoặc nếu áp lực cần được điều chỉnh. Tùy thuộc vào việc áp lực dưới 100 hoặc trên 300 sẽ có hành động khác nhau do ngoại lệ thực hiện, áp lực là một đối số mà người dùng phải cung cấp. Một khi được kích hoạt, một cửa sổ pop-up tùy chỉnh với mã lỗi và thông điệp được hiển thị.
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")
Lớp ngoại lệ tùy chỉnh thứ hai nhằm điều chỉnh nhiệt độ trong các máy nước nóng, nếu nhiệt độ quá thấp hoặc quá cao, bạn phải nhập một nhiệt độ mới dưới dạng đối số để khắc phục lỗi khi nó xảy ra.
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")
Để bắt đầu, đi đến dấu X sáng trên thảm xanh và đối diện với bể chứa có van, có bốn (4) van này điều chỉnh áp lực nước được bơm từ bể chứa. Có bốn hằng số biến: green_pressure, red_pressure, blue_pressure và orange_pressure, những hằng số này lưu trữ áp lực của mỗi bể chứa tương ứng với màu thảm.
Trên tất cả các dấu X sáng, sử dụng các khối mã try/except và else để kiểm tra xem áp lực trên mỗi bể chứa có phù hợp hay không. Nếu áp lực dưới 100 hoặc trên 300 thì hãy kích hoạt ngoại lệ tùy chỉnh PressureError và thêm áp lực làm đối số. Nếu được kích hoạt, nó sẽ hiển thị mã lỗi và đưa ra biện pháp khắc phục, nếu không, khối else được kích hoạt, xác nhận rằng áp lực trong bể chứa là phù hợp. Ví dụ:
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" )
Thực hiện điều này trên tất cả các dấu X sáng, sử dụng các hằng số biến tương ứng với từng màu thảm và xác nhận hoặc điều chỉnh van áp lực khi cần thiết.
Khi đã xong, hãy đi đến dấu X màu vàng và sử dụng hàm open() để truy cập vào kho chứa có máy nước nóng, một khi bên trong, hãy đi đến dấu X màu vàng bên trong kho chứa và sử dụng hàm read() để đọc thông báo trên quầy. Thông báo này sẽ cung cấp cho bạn thông tin về nhiệt độ lý tưởng cho từng máy nước nóng.
Khi bạn có thông tin về từng nhiệt độ, hãy đi đến dấu X tối trên thảm màu tím, ở đây chúng ta sẽ sử dụng chuỗi mã try/except và else để kiểm tra xem các máy nước nóng có đạt nhiệt độ chính xác hay không. Có bốn hằng số biến liên quan đến các thảm có màu khác nhau: purple_temperature, yellow_temperature, pink_temperature và white_temperature.
Trong chuỗi này, chúng ta sẽ kiểm tra nếu nhiệt độ dưới 100, nếu như vậy, chúng ta sẽ kích hoạt ngoại lệ TemperatureError. Là một ngoại lệ tùy chỉnh, nó nhận một đối số, trong trường hợp này bạn phải nhập nhiệt độ được đọc trong thông báo để thực thi biện pháp khắc phục lỗi một cách chính xác. Ví dụ:
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" )
Thực hiện điều này cho tất cả các máy nước nóng, tại mỗi dấu X khi đối diện với các máy, thực hiện chuỗi này sử dụng các hằng số biến tương ứng với màu của từng thảm để hoàn thành cấp độ.