Coding for KidsCoding for Kids
Cấp Độ Sáng TạoThử TháchHướng Dẫn Giáo Viên
Bình chọn tính năng
Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ

Xử lý ngoại lệ
Tổng kết về Exception

Mục tiêu

Đi đến văn phòng và đảm bảo rằng nguồn cung tiền được cân đối đúng cách bằng cách sử dụng khối mã finally và từ khóa assert.

Ở tầng hai, có một văn phòng được dành riêng để lưu trữ quỹ cho các khoản đầu tư trong tương lai cho trang trại. Đã đến lúc kiểm tra và đảm bảo rằng tất cả các sổ sách được cân đối. Khi làm việc với số liệu, các lỗi về toán học và các vấn đề khác có thể xảy ra, vì vậy một lần nữa, xử lý ngoại lệ là ý tưởng tốt để bắt và giải quyết các lỗi.

Ngoài các khối mã try / exceptelse, còn có khối mã finally cho phép bạn kết thúc một ngoại lệ. Bên cạnh đó, từ khóa assert là một tính năng gỡ lỗi cho phép bạn kiểm tra xem mã có bất kỳ lỗi nào không, giúp bạn sửa mã sai.

Bắt đầu bằng cách đi đến dấu X sáng ở phía trước cửa văn phòng và sử dụng hàm open() để mở cửa vào bên trong. Một khi đã vào trong, tiến đến dấu X vàng và sử dụng hàm collect() để thu thập hai hằng số khác nhau có tên: categoriessavings. Hằng số categories là một danh sách chứa nguồn cung tiền của ba hạng mục, có tên: "exports", "imports", "stock", cần được xác minh. Hằng số savings là một biến giữ nguồn cung tiền có thể cần thiết để đảm bảo rằng két tiền được bổ sung đúng cách.

Bây giờ, khi đã thu thập đầy đủ các vật phẩm cần thiết, đã đến lúc cân đối nguồn cung tiền được lưu trữ trong các bao, mà sau khi bạn hoàn thành, một nhân viên thư ký sẽ thu thập và phân phối. Đi đến dấu X tối trên thảm blue, cho các dấu X trên thảm blue, yellowred. Ở đây chúng ta sẽ sử dụng danh sách hằng số categories để xác minh rằng mỗi bao có đầy đủ các thành phần cần thiết trước khi được giao hàng.

Mỗi bao được cho là sẽ chứa các thành phần có trong danh sách categories. Có ba hằng số từ điển tương ứng với mỗi bao: blue_sack, yellow_sackred_sack. Chạy một vòng lặp for trong khi đứng trên dấu X trên thảm blue để xác minh rằng bao có đầy đủ các vật liệu cần thiết rồi xác nhận nguồn cung đã được ghi nhận.

for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")

Một số bao có thể đã có đầy đủ các vật liệu cần thiết, nhưng như thường lệ trong các bài tập này, bạn có thể gặp phải một lỗi. Nếu gặp vấn đề, bạn phải sử dụng các khối mã try / except để bắt lỗi, trong trường hợp này là KeyError: xảy ra nếu một khóa trong từ điển không được tìm thấy. Khi điều này xảy ra, chúng ta cũng thêm finally vào ngoại lệ, nó kết thúc ngoại lệ bằng cách thêm mã luôn được thực thi ở cuối mỗi xử lý ngoại lệ. Khác với các ngoại lệ, chỉ có thể có một khối finally cho mỗi try. Ví dụ, trong trường hợp của blue_sack:

try: for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) except: player.speak("Bag is missing %s, adding now" % (categories[x])) player.place(categories[x]) finally: player.speak("All assets accounted for")

Lặp lại quá trình này trên các dấu X tối trên thảm yellowred, sử dụng các hằng số từ điển yellow_sackred_sack. Có thể không cần thiết trong một số trường hợp vì lỗi xảy ra chỉ khi có một vật liệu thiếu trong các bao.

Bây giờ, khi các bao đã được xác minh, đã đến lúc chuyển sang các rương phía trước các thảm: green, purpleorange. Ở đây, chúng ta phải đảm bảo rằng nguồn cung tiền chính xác là 30 trong mỗi rương và sau đó đóng lại. Có ba hằng số biến tương ứng với mỗi rương, có tên: green_chest, purple_chest, và orange_chest.

Vấn đề lớn nhất khi xác minh các rương là chúng ta không biết chính xác nội dung của chúng; khi làm việc với các giá trị không xác định, bạn có thể sử dụng từ khóa assert. Từ khóa này cho phép bạn xác minh rằng mệnh đề mà bạn tuyên bố là đúng hay sai, điều này rất hữu ích để kiểm tra xem mã của bạn có bị lỗi hay không. Từ khóa assert được sử dụng kết hợp với: try, except, elsefinal cùng với các kết hợp khác nhau để sửa chữa mã có lỗi. Ví dụ, trong trường hợp của green_chest:

try: assert(green_chest = 30) except AssertionError: player.speak("Chest is not full %s/30" % green_chest) drop = 30-green_chest savings -= drop player.place(drop) else: player.speak("All assets accounted for") finally: player.close()

Trong đoạn mã trên, chúng ta xác minh xem green_chest có chứa nguồn cung tiền đủ mức hay không bằng cách sử dụng từ khóa assert. Nếu không chứa đủ số lượng, khối except được kích hoạt và chúng ta tính toán rồi trừ đi phần thiếu hụt từ biến savings và thêm vào rương. Nếu nguồn cung đầy đủ, khối else được kích hoạt và xác nhận rằng tất cả tài sản đã được ghi nhận. Một khi mọi thứ đã được xác minh, khối finally được thực thi và hàm close() được gọi để đóng rương.

Tại các dấu X trên thảm green, purpleorange, đối diện với các rương và chạy quá trình xác minh bằng cách sử dụng: green_chest, purple_chest, orange_chest trên các thảm có màu tương ứng. Sau khi hoàn thành, đi đến dấu X sáng và sử dụng hàm place() để lưu trữ phần còn lại của biến savings vào thùng hàng để hoàn thành cấp độ.

Sách Mã