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
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:
trythự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))