Cách xử lý ngoại lệ trong Python (Thử-Ngoại trừ-Cuối cùng)

Tìm hiểu cách xử lý các ngoại lệ trong Python bằng cách sử dụng các khối thử, ngoại trừ, khác và cuối cùng. Viết mã Python không có lỗi và chống lỗi.

Hãy thử Giải pháp này trong Trình chỉnh sửa

Tổng quan

Phần mềm mạnh mẽ phải được chuẩn bị để xử lý các tình huống không mong muốn, chẳng hạn như thiếu tệp, đầu vào của người dùng không hợp lệ, lỗi cơ sở dữ liệu hoặc gián đoạn mạng. Khi xảy ra lỗi trong Python, nó sẽ tạo ra một ngoại lệ. Nếu không được xử lý, các ngoại lệ sẽ dừng chương trình của bạn ngay lập tức và in ngăn xếp truy nguyên.

Công cụ chính của Python để quản lý lỗi thời gian chạy là khối `try-ngoại trừ`. Bạn đặt mã có thể gây ra lỗi bên trong khối `try` và xác định mã xử lý lỗi bên trong một hoặc nhiều khối `ngoại trừ`. Bạn nên chỉ định lớp ngoại lệ chính xác (như `ValueError` hoặc `ZeroDivisionError`), vì việc bắt tất cả các ngoại lệ chung (`ngoại trừ:`) có thể che giấu lỗi.

Để làm cho luồng ngoại lệ của bạn diễn đạt rõ ràng hơn, Python cung cấp hai khối bổ sung: `else` và `finally`. Khối `else` chỉ thực thi nếu không có ngoại lệ nào được đưa ra trong khối `try`, điều này rất hữu ích đối với mã chỉ nên chạy khi thành công. Khối `cuối cùng` thực thi *luôn luôn*, bất kể ngoại lệ có xảy ra hay không, khiến nó trở thành nơi hoàn hảo để dọn dẹp như đóng tệp hoặc kết nối cơ sở dữ liệu.

Đầu ra mã & thực thi

Tập lệnh này thể hiện khả năng xử lý lỗi mạnh mẽ trong Python bằng cách sử dụng thử, ngoại trừ, khác và cuối cùng.

def divide_numbers(a, b):
    try:
        # Code that might raise an exception
        result = a / b
    except ZeroDivisionError:
        # Handling a specific exception
        print("Error: Cannot divide by zero!")
    except TypeError:
        # Handling another exception type
        print("Error: Inputs must be numbers!")
    else:
        # Run only if try block succeeded
        print(f"Success! Result of {a}/{b} is {result}")
    finally:
        # Runs no matter what
        print("Division attempt completed.")

divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)
Đầu ra thiết bị đầu cuối
Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.

Triển khai từng bước

  • Đặt mã có thể bị lỗi bên trong khối thử.
  • Nắm bắt các loại lỗi cụ thể bằng các khối ngoại trừ ExceptionType: để xử lý lỗi một cách khéo léo.
  • Sử dụng else cho mã chỉ được thực thi trên các khối thử thành công.
  • Sử dụng cuối cùng để đảm bảo các hành động dọn dẹp được thực hiện bất kể lỗi.

Câu hỏi thường gặp

Tôi có thể bắt nhiều ngoại lệ trong một khối ngoại trừ không?

Có, bạn có thể chuyển chúng dưới dạng một bộ dữ liệu: ngoại trừ (ValueError, TypeError) dưới dạng e:.

Làm cách nào để đưa ra các ngoại lệ của riêng tôi?

Sử dụng từ khóa raise theo sau là trường hợp ngoại lệ: raise ValueError("Giá trị cấu hình không hợp lệ").

Chủ đề liên quan

Tài nguyên Python được đề xuất

Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.