Đọc hiểu thông báo lỗi (error message): kỹ năng cứu bạn khỏi bế tắc

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Nhiều người mới thấy chữ đỏ đầy màn hình là hoảng và bỏ qua. Thực ra thông báo lỗi là lời chỉ dẫn miễn phí từ máy tính, thường cho biết chính xác lỗi gì và ở đâu. Học đọc nó nhanh chóng là một trong những kỹ năng đáng giá nhất.

Một thông báo lỗi gồm những gì?

Hầu hết thông báo có ba phần thông tin quan trọng:

  1. Loại lỗi: tên như NameError, TypeError.
  2. Mô tả: giải thích ngắn về chuyện gì sai.
  3. Vị trí: file và số dòng.

Xem ví dụ trong Python:

def tinh_tuoi(nam_sinh):
    return 2024 - nam_sinh

print(tinh_tuoi("1999"))

Chạy sẽ cho kết quả như sau:

Traceback (most recent call last):
  File "demo.py", line 4, in <module>
    print(tinh_tuoi("1999"))
  File "demo.py", line 2, in tinh_tuoi
    return 2024 - nam_sinh
TypeError: unsupported operand type(s) for -: 'int' and 'str'

Cách đọc traceback: từ dưới lên

Dòng cuối cùng là quan trọng nhất: TypeError với mô tả "không hỗ trợ phép trừ giữa int và str". Ngay lập tức bạn biết: đang lấy số trừ chuỗi. Các dòng phía trên là vết ngăn xếp lời gọi (stack trace), cho biết chuỗi hàm đã gọi nhau để đến chỗ lỗi. Dòng sát ngay phía trên dòng cuối chỉ đúng nơi lỗi xảy ra: file demo.py, dòng 2, trong hàm tinh_tuoi. Nguyên nhân gốc thực ra nằm ở dòng 4, nơi truyền vào chuỗi thay vì số.

Các lỗi phổ biến và ý nghĩa

LỗiThường có nghĩa là
SyntaxErrorSai cú pháp: thiếu ngoặc, dấu hai chấm, thụt dòng
NameErrorDùng tên biến hoặc hàm chưa được định nghĩa (hoặc gõ sai tên)
TypeErrorDùng sai kiểu dữ liệu cho phép toán hoặc hàm
ValueErrorKiểu đúng nhưng giá trị không hợp lệ, như int("abc")
IndexErrorTruy cập chỉ số ngoài phạm vi danh sách
KeyErrorKhóa không tồn tại trong từ điển
AttributeErrorĐối tượng không có thuộc tính hay phương thức đó
ZeroDivisionErrorChia cho 0
FileNotFoundErrorĐường dẫn file sai hoặc file không tồn tại

JavaScript có những lỗi tương tự với tên khác, ví dụ ReferenceError (biến chưa khai báo) và TypeError: Cannot read properties of undefined khi bạn truy cập thuộc tính của giá trị không tồn tại.

Quy trình đối phó khi gặp lỗi

  1. Đừng hoảng, đọc từ dòng cuối. Hiểu loại lỗi và mô tả.
  2. Đi tới đúng dòng mà thông báo chỉ ra và nhìn kỹ các dòng xung quanh. Với lỗi cú pháp, lỗi thật đôi khi nằm ở dòng trước đó.
  3. Tự hỏi: giá trị của các biến ở dòng này thực sự là gì? Dùng print hoặc debugger để kiểm tra.
  4. Sao chép nguyên văn thông báo lỗi (bỏ phần đường dẫn riêng tư) và tìm kiếm trên mạng. Rất có thể ai đó đã gặp đúng lỗi này.
  5. Nếu vẫn bí, hỏi người khác và đính kèm: đoạn code tối thiểu, thông báo lỗi đầy đủ, điều bạn mong đợi và điều thực tế xảy ra.

Lỗi thường là hệ quả, không phải nguyên nhân

Ví dụ lỗi ở dòng 2 nhưng nguyên nhân là dữ liệu sai từ dòng 4. Hãy đi ngược theo vết ngăn xếp để tìm nơi giá trị sai thực sự được tạo ra.

Xử lý lỗi một cách chủ động

def doc_tuoi(chuoi):
    try:
        return int(chuoi)
    except ValueError:
        print("Giá trị không phải số nguyên:", chuoi)
        return None

print(doc_tuoi("19"))
print(doc_tuoi("mười chín"))

Bắt lỗi cụ thể thay vì bắt tất cả; bắt mọi lỗi một cách mù quáng sẽ che giấu vấn đề thật.

Đọc lỗi trong JavaScript và trình duyệt

Với web, lỗi hiện trong tab Console của DevTools (F12). Ví dụ:

const nguoi = { ten: "Lan" };
console.log(nguoi.dia_chi.thanh_pho);
// Uncaught TypeError: Cannot read properties of undefined (reading 'thanh_pho')

Thông báo nói: bạn đang đọc thuộc tính thanh_pho của một giá trị undefined. Vì nguoi.dia_chi không tồn tại nên nó là undefined. Cách sửa tùy ý định: kiểm tra trước, hoặc dùng toán tử truy cập tùy chọn:

console.log(nguoi.dia_chi?.thanh_pho);          // undefined, không lỗi
console.log(nguoi.dia_chi?.thanh_pho ?? "Chưa có");

Một số thông báo hay gặp khác:

  • ReferenceError: x is not defined: dùng biến chưa khai báo hoặc gõ sai tên.
  • SyntaxError: Unexpected token: thiếu hoặc thừa ký tự, thường là ngoặc hoặc dấu phẩy.
  • 404 (Not Found) trong tab Network: đường dẫn tài nguyên sai.
  • Lỗi CORS: trình duyệt chặn yêu cầu sang tên miền khác do server chưa cho phép.

Mỗi dòng lỗi trong Console đều có liên kết đến file và dòng gây lỗi; bấm vào đó để nhảy thẳng tới code. Đây là phím tắt tiết kiệm rất nhiều thời gian.

Kết luận

Thông báo lỗi là người bạn, không phải kẻ thù. Hãy tập thói quen đọc dòng cuối, xác định loại lỗi, nhìn đúng dòng, kiểm tra giá trị biến. Chỉ sau một thời gian, bạn sẽ nhận ra phần lớn lỗi quen thuộc chỉ trong vài giây.

Bạn có thể tiếp tục hành trình với những khóa học lập trình trên codebem.com, học theo tốc độ của riêng mình.

author_photo
Nguyễn Đình Cường

0 comment