Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Xử Lý Ngoại Lệ (Exception Handling) trong Python: try, except, finally

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 0
  • ValueError: Giá trị không phù hợp (vd: int("abc"))
  • IndexError: Truy cập index ngoài phạm vi list
  • KeyError: Key không tồn tại trong dict
  • ImportError: Import module không tồn tại
  • IOError / FileNotFoundError: Lỗi đọc/ghi file
  • KeyboardInterrupt: 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

  1. Chạy code trong try.
  2. Nếu không có exception → bỏ qua except, chạy else (nếu có), rồi finally.
  3. Nếu có exception khớp except → nhảy vào except, rồi finally.
  4. Nếu exception không khớp except nào → ném ra ngoài (crash nếu không bắt ở cấp cao hơn).
  5. Có thể viết nhiều except cho 1 try.

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.