Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ
Xử lý ngoại lệ
Ngoại lệ tùy chỉnh
Mục tiêu
Sử dụng ngoại lệ tùy chỉnh để thu thập các tin nhắn với đơn đặt hàng sản phẩm và gửi chúng đi qua chim bồ câu đưa thư.
Một số tin nhắn được triển khai trên khắp nông trại và các trạm khác thông qua chim bồ câu đưa thư, sẽ là một ý tưởng tốt khi gửi đi một vài tin nhắn để đón đầu tiến độ. Chúng ta đã sử dụng các ngoại lệ chung để bắt các lỗi, nhưng đôi khi bạn có thể được lợi từ việc tạo ra ngoại lệ tùy chỉnh riêng cho các tình huống cụ thể. Chúng ta sẽ lấy nguồn các tin nhắn và chọn chim bồ câu bằng cách xác định các mục chính xác sử dụng ngoại lệ tùy chỉnh của chính chúng ta.
Ngoại lệ tùy chỉnh được tạo ra bằng cách tạo các lớp, bằng cách thêm mệnh đề (Exception) bạn có thể tái sử dụng một lớp để thực thi các ngoại lệ. Trong mục đích của chúng ta, chúng ta sẽ tạo ra hai loại: InvalidLocation được kích hoạt khi một chuỗi cụ thể không vượt qua quá trình xác minh, và UnsuitableSelection được sử dụng để kiểm tra xem một số có vượt qua một ngưỡng nhất định hay không.
class InvalidLocation(Exception):
"Raised when location is invalid"
pass
class UnsuitableSelection(Exception):
"Raised when pidgeon is 2 or younger"
pass
Bây giờ khi các lớp đã được thiết lập, đã đến lúc lấy các bản ghi nhớ để chúng có thể được gửi đi. Tạo một danh sách có tên prep để lưu trữ và kết hợp các thành phần cần thiết cho giao dịch sắp tới. Đi đến dấu X tối trên thảm đỏ, trên chuỗi bàn có dấu X ở phía trước, chúng ta sẽ tìm kiếm các bản ghi nhớ có đơn đặt hàng được gửi tới khu vực phía tây của nông trại.
Có bốn hằng số biến được sử dụng trong đoạn này: red_memo, blue_memo, green_memo và orange_memo. Chỉ những bản ghi nhớ được đánh dấu là giao tới khu vực "west" mới được thu thập để có thể gửi đi. Để xác định có nên lấy bản ghi nhớ hay không, chúng ta sẽ sử dụng các khối mã try/except và else kết hợp với ngoại lệ tùy chỉnh InvalidLocation. Để sử dụng ngoại lệ tùy chỉnh, hãy để khối try kiểm tra xem bản ghi nhớ có nhãn "west" hay không và nếu không thì kích hoạt ngoại lệ. Khối except xác nhận rằng bản ghi nhớ không hợp lệ và khối else thu thập, và thêm bản ghi nhớ vào danh sách prep nếu nó được gửi tới khu vực "west". Ví dụ:
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)
Đi đến từng dấu X tối trên các thảm có màu phía trước bàn và chạy chuỗi ngoại lệ bằng cách sử dụng các hằng số biến thích hợp tương ứng với mỗi màu.
Khi bạn đã thu thập được các bản ghi nhớ, hãy đi đến dấu X vàng phía trước cửa và sử dụng hàm open() để truy cập các chuồng chim bồ câu. Khi bên trong, đi đến dấu X sáng, quay lại, sử dụng hàm close() để đóng cửa nhằm đảm bảo không có chim bồ câu nào trốn thoát.
Đi đến dấu X tối trên thảm tím, trên các chuồng bút chúng ta sẽ kiểm tra xem chim bồ câu có đủ tuổi để bay mang tin hay không hoặc nếu nó là chim non không thể giao hàng. Có bốn hằng số biến nữa sẽ được sử dụng trong đoạn này: purple_pen, yellow_pen, white_pen và pink_pen tương ứng với mỗi thảm có màu. Chúng ta sẽ sử dụng cùng kỹ thuật như với các bản ghi nhớ, sử dụng lớp thứ hai đã được thiết lập.
Sử dụng các khối mã try/except và else với ngoại lệ tùy chỉnh UnsuitableSelection để xác định xem chim bồ câu có đủ tuổi để giao hàng hay không. Khối try kiểm tra xem hằng số biến đại diện cho chuồng bút có chim bồ câu phù hợp bằng cách kiểm tra nếu con chim có tuổi nhỏ hơn hai (2) năm. Nếu chim bồ câu không phù hợp, khối except sẽ được kích hoạt, ngược lại, khối else được kích hoạt cho phép bạn thêm chim bồ câu vào danh sách prep nhằm giao tin.
try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")
Đi đến từng dấu X tối trên các thảm có màu và sử dụng chuỗi này với hằng số biến đúng tương ứng với thảm có màu đúng. Khi bạn đã thu thập được chim bồ câu và tin nhắn, hãy đi đến dấu X vàng ở dưới cùng và sử dụng hàm place() với danh sách prep bạn đã tạo để gửi chim bồ câu giao tin và hoàn thành cấp độ.