Python phân biệt 2 loại lỗi chính:
- Syntax Error: Lỗi cú pháp, Python không hiểu code (phát hiện trước khi chạy).
- Exception (Ngoại lệ): Lỗi phát sinh lúc runtime (chia cho 0, index sai, key không tồn tại...).
Không thể ngăn syntax error, nhưng có thể bắt và xử lý exception bằng try - except.
Các exception thường gặp
ZeroDivisionError: Chia cho 0ValueError: Giá trị không phù hợp (vd:int("abc"))IndexError: Truy cập index ngoài phạm vi listKeyError: Key không tồn tại trong dictImportError: Import module không tồn tạiIOError/FileNotFoundError: Lỗi đọc/ghi fileKeyboardInterrupt: User nhấn Ctrl+C
Cú pháp cơ bản
try:
# Code có thể gây exception
...
except ExceptionType:
# Xử lý khi có exception
...
else:
# Chạy nếu KHÔNG có exception (tùy chọn)
...
finally:
# Luôn chạy (cleanup resource) - tùy chọn
...
Cơ chế thực thi
- Chạy code trong
try. - Nếu không có exception → bỏ qua
except, chạyelse(nếu có), rồifinally. - Nếu có exception khớp
except→ nhảy vàoexcept, rồifinally. - Nếu exception không khớp
exceptnào → ném ra ngoài (crash nếu không bắt ở cấp cao hơn). - Có thể viết nhiều
exceptcho 1try.
Ví dụ thực hành
Trường hợp không lỗi
try:
arr = [1, 2, 3, 4, 5]
two = arr[1]
print(f"Không lỗi: {two}")
except IndexError:
print("Index không hợp lệ")
Kết quả: Không lỗi: 2
Trường hợp có lỗi IndexError
try:
arr = [1, 2, 3, 4, 5]
six = arr[6] # IndexError
print(f"Không lỗi: {six}")
except IndexError:
print("Index không hợp lệ")
Kết quả: Index không hợp lệ
Trường hợp except không khớp exception
try:
arr = [1, 2, 3, 4, 5]
six = arr[6] # IndexError
except ValueError: # Bắt ValueError, nhưng lỗi là IndexError
print("Index không hợp lệ")
Kết quả: IndexError: list index out of range (chương trình crash)
Kết luận
Luôn bắt exception cụ thể (tránh except: trắng). Sử dụng finally để đóng file, kết nối DB. else hữu ích cho code chỉ chạy khi thành công.