Bắt ngoại lệ trong Python
Trong Python so với các ngôn ngữ lập trình khác có rất nhiều tình huống gây ra ngoại lệ.
Chúng ta hãy xem xét chúng chi tiết hơn. Giả sử chúng ta có một danh sách:
lst = [1, 2, 3]
Hãy truy cập một phần tử không tồn tại trong danh sách:
print(lts[4])
Sau khi thực thi mã, một lỗi (ngoại lệ) sẽ được hiển thị:
IndexError: list index out of range
Nếu chúng ta cần tiếp tục làm việc mà không
hiển thị ngoại lệ, cần phải bắt nó
bằng cấu trúc try-except. Nó
có cú pháp như sau:
try:
# mã có thể gây ra ngoại lệ
except:
# xử lý lỗi
Trong khối try nên đặt mã
có thể chứa ngoại lệ. Nếu
khi thực thi mã này mà xảy ra
một tình huống ngoại lệ, thì việc thực thi
mã sẽ không dừng lại, mà sẽ chuyển sang mã trong khối
except. Trong khối này nên
viết ra một thông báo mô tả càng chính xác càng tốt
bản chất của lỗi đã xảy ra.
Nếu khi thực thi khối try
không xảy ra bất kỳ tình huống ngoại lệ nào,
thì mã hữu ích sẽ được thực thi, còn mã
từ khối except thì sẽ không.
Hãy bắt ngoại lệ của chúng ta khi truy cập
phần tử không tồn tại trong danh sách. Để
làm điều này, trong khối try đặt mã có
khả năng gây lỗi. Còn trong khối except
chỉ định việc in ra màn hình thông báo 'error:
elem is not exist':
lst = [1, 2, 3]
try:
print(lst[4])
except:
print('error: elem is not exist')
Sau khi thực thi mã, kết quả sẽ là:
'error: elem is not exist'
Sau khi học cấu trúc try-except,
phong cách viết mã của bạn phải thay đổi.
Bây giờ tất cả những chỗ có thể phát sinh
tình huống ngoại lệ, cần phải bọc
trong try, còn trong khối except
viết ra phản ứng với ngoại lệ này.
Hãy hỏi người dùng hai số. Chia một số cho số kia. Hãy bắt tình huống ngoại lệ chia cho không.
Hãy hỏi người dùng một số. Tìm căn bậc hai của số này. Hãy bắt tình huống ngoại lệ khi trích xuất căn bậc hai từ số âm.
Cho một danh sách. Hãy hỏi người dùng một số nguyên. Lấy phần tử của danh sách có số thứ tự mà người dùng đã nhập. Hãy bắt tình huống ngoại lệ sẽ xảy ra nếu người dùng nhập một số ngoài phạm vi của danh sách.
Cho mã sau:
num = '5'
res = num + 2
print(res)
Có gì không ổn với mã này? Hãy sửa chữa các thiếu sót của nó.
Cho mã sau:
lst = [1, 2, 3, 4]
def getElem(iter):
print(iter[4])
getElem(lst)
Có gì không ổn với mã này? Hãy sửa chữa các thiếu sót của nó.