Bắt đầu ngayBắt đầu miễn phí

Bắt ngoại lệ

Trước khi tự viết các ngoại lệ tùy chỉnh, hãy chắc chắn rằng bạn nắm vững những điều cơ bản về xử lý ngoại lệ.

Trong bài này, bạn được cung cấp hàm invert_at_index(x, ind) nhận hai đối số: một list x và một chỉ số ind, rồi lấy nghịch đảo phần tử của list tại vị trí đó. Ví dụ invert_at_index([5,6,7], 1) trả về 1/6, hay 0.166666.

Hãy thử chạy mã như hiện tại và xem kết quả trong console. Có hai thao tác không an toàn trong hàm này: thứ nhất, nếu phần tử mà ta đang cố nghịch đảo có giá trị 0, mã sẽ gây ra ngoại lệ ZeroDivisionError. Thứ hai, nếu chỉ số truyền vào nằm ngoài phạm vi của list, mã sẽ gây ra IndexError. Cả hai trường hợp đều sẽ làm chương trình bị gián đoạn, điều này có thể không mong muốn.

Bài tập này là một phần của khóa học

Lập trình hướng đối tượng trong Python

Xem khóa học

Hướng dẫn bài tập

Dùng mẫu try - except - except (với hai khối except) bên trong hàm để bắt và xử lý hai ngoại lệ như sau:

  • try thực thi mã như hiện tại,
  • nếu xảy ra ZeroDivisionError, in "Cannot divide by zero!",
  • nếu xảy ra IndexError, in "Index out of range!"

Bạn biết mình làm đúng nếu mã chạy không lỗi và kết quả trong console là:

0.16666666666666666
Cannot divide by zero!
None
Index out of range!
None

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# MODIFY the function to catch exceptions
def invert_at_index(x, ind):
    return 1/x[ind]
 
a = [5,6,0,7]

# Works okay
print(invert_at_index(a, 1))

# Potential ZeroDivisionError
print(invert_at_index(a, 2))

# Potential IndexError
print(invert_at_index(a, 5))
Chỉnh sửa và Chạy Mã