Các mánh debug code Python phổ biến và hiệu quả

Dưới đây là các mánh debug code Python phổ biến và hiệu quả:

Sử dụng print() thông minh:

  • In giá trị của biến tại các điểm quan trọng trong code để kiểm tra luồng dữ liệu.
  • Thêm thông tin ngữ cảnh, ví dụ: print(f"Biến x tại dòng 10: {x}").
  • Dùng pprint từ module pprint để in cấu trúc dữ liệu phức tạp (list, dict) rõ ràng hơn.

Dùng assert để kiểm tra giả định:

  • Thêm câu lệnh assert điều_kiện, "thông báo lỗi" để kiểm tra các điều kiện phải đúng.
  • Ví dụ: assert len(my_list) > 0, "Danh sách rỗng!".

Sử dụng debugger tích hợp (PDB):

  • Thêm import pdb; pdb.set_trace() tại điểm muốn debug để tạm dừng chương trình.
  • Dùng các lệnh như n (next), s (step), c (continue), p biến (in giá trị biến).
  • Python 3.7+ hỗ trợ breakpoint() thay cho pdb.set_trace().

Dùng IDE với debugger:

  • Các IDE như PyCharm, VS Code, hoặc Jupyter Notebook có giao diện debug trực quan.
  • Đặt breakpoint, theo dõi giá trị biến, và kiểm tra stack trace dễ dàng.

Kiểm tra lỗi với try-except:

  • Bọc code nghi vấn trong try-except để bắt và in thông tin lỗi chi tiết.
  • Ví dụ:
    python try: result = risky_operation() except Exception as e: print(f"Lỗi: {e}")

Sử dụng logging thay vì print:

  • Dùng module logging để ghi log với các mức độ (DEBUG, INFO, WARNING, ERROR).
  • Ví dụ:
    python import logging logging.basicConfig(level=logging.DEBUG) logging.debug("Giá trị biến x: %s", x)

Kiểm tra kiểu dữ liệu và giá trị:

  • Dùng type(biến)isinstance(biến, Kiểu) để kiểm tra kiểu dữ liệu.
  • Dùng id(biến) để kiểm tra xem hai biến có trỏ cùng một đối tượng không.

Sử dụng công cụ linting:

  • Dùng flake8, pylint, hoặc mypy để phát hiện lỗi cú pháp, lỗi logic tiềm ẩn, hoặc vấn đề về kiểu dữ liệu trước khi chạy.

Kiểm tra code từng phần:

  • Tách code thành các hàm nhỏ, dễ kiểm tra.
  • Dùng unit test (module unittest hoặc pytest) để kiểm tra từng hàm riêng lẻ.

Sử dụng công cụ debug bên ngoài:
PySnooper: Thêm decorator @pysnooper.snoop() để tự động log toàn bộ giá trị biến trong hàm.
ipdb: Phiên bản nâng cấp của pdb, cài bằng pip install ipdb.
tracemalloc: Theo dõi bộ nhớ, hữu ích khi tìm memory leak.

Kiểm tra lỗi phổ biến:
Index out of range: Kiểm tra độ dài danh sách/tuple trước khi truy cập.
KeyError: Dùng dict.get(key, default) để tránh lỗi key không tồn tại.
TypeError: Đảm bảo kiểu dữ liệu phù hợp trước khi thực hiện phép toán.

Dùng REPL hoặc Jupyter Notebook:
– Thử nghiệm đoạn code nhỏ trong Python REPL hoặc Jupyter để kiểm tra nhanh logic.

Mẹo bổ sung:

  • Đọc kỹ thông báo lỗi (traceback) để xác định dòng và loại lỗi.
  • Tìm kiếm thông báo lỗi trên Google hoặc Stack Overflow, nhưng kiểm chứng trước khi áp dụng.
  • Viết code đơn giản, rõ ràng để giảm thiểu lỗi từ đầu.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

error: Content is protected !!