BÀI 29: NHẬN BIẾT LỖI CHƯƠNG TRÌNH

   


CHỦ ĐỀ 5 – BÀI 29 – TIN HỌC 10

Nhận Biết Lỗi Chương Trình

Phân loại lỗi chương trình Python & các lỗi ngoại lệ thường gặp

🎯 Mục Tiêu Bài Học

  • Biết và phân loại được một số loại lỗi chương trình.
  • Biết được một vài lỗi ngoại lệ thường gặp.

1. Nhận Biết Lỗi Chương Trình

Một chương trình hoàn chỉnh gồm:

Input → Chương trình → Output

Nếu chương trình có lỗi thì có thể xảy ra nhiều trường hợp khác nhau.

Trường hợp 1: Sai cú pháp (Syntax Error)

Viết sai cú pháp:

while True:
print("Hello")

Báo lỗi: SyntaxError

Trường hợp 2: Nhập dữ liệu sai kiểu (ValueError)

Nhập dữ liệu sai kiểu:

n = int(input()) # Nhập: 1.5

Báo lỗi: ValueError

Trường hợp 3: Truy cập ngoài phạm vi (IndexError)

Truy cập phần tử ngoài phạm vi danh sách:

A = [1, 3, 10, 0]
for i in range(5):
print(A[i])

Báo lỗi: IndexError

Trường hợp 4: Kết quả sai (Logic Error)

Chương trình chạy nhưng kết quả sai:

s = 0
for i in range(3):
s = s + i
print(s)
Kết quả: 3 (đúng phải là 6)

Do range(3) chỉ tạo 0, 1, 2

📋 Kết Luận: Ba loại lỗi chính
  1. Syntax Error – Sai cú pháp.
  2. Runtime Error (Exception) – Lỗi xảy ra khi chương trình đang chạy.
  3. Logic Error – Chương trình chạy nhưng kết quả sai.

2. Một Số Lỗi Ngoại Lệ Thường Gặp

Mã lỗiÝ nghĩa
ZeroDivisionErrorChia cho 0
IndexErrorChỉ số vượt phạm vi
NameErrorBiến chưa khai báo
TypeErrorSai kiểu dữ liệu
ValueErrorGiá trị không hợp lệ
IndentationErrorSai thụt lề
SyntaxErrorSai cú pháp
Ví dụ:
A[1.5]

TypeError

int("abc")

ValueError

"10" * 3.5

TypeError

12 + x(10)

NameError

Thực Hành

Nhiệm vụ 1: Nhập hai số nguyên

Viết chương trình nhập hai số nguyên m, n. In Tổng, Hiệu, Thương.

s = input()
sline = s.split()
m = int(sline[0])
n = int(sline[1])
print("Tổng:", m + n)
print("Hiệu:", m - n)
print("Thương:", m / n)

Khả năng phát sinh lỗi:

  • Không nhập số nguyên → ValueError
  • Không nhập đủ hai số → IndexError
  • Chia cho 0 → ZeroDivisionError
Nhiệm vụ 2: Nhập n số vào danh sách

Nhập n, sau đó nhập n số nguyên vào danh sách.

A = []
for k in range(n):
num = int(input())
A.append(num)
print(A)

Có thể sinh lỗi:

  • n không phải số nguyên → ValueError
  • Phần tử nhập không phải số nguyên → ValueError

Luyện Tập

Câu 1: Các lệnh sau có sinh lỗi không?

Các lệnh sau có sinh lỗi không?

A = [1, 3, 5, 10, 0]
for k in range(1, len(A) + 1):
print(A[k])
s1 = "101010"
s2 = 1010101
s = s1 + s2

Đoạn 1: IndexError – range(1,5) → k=4 nhưng A chỉ có chỉ số 0–4, khi k=5 vượt phạm vi.

Đoạn 2: TypeError – Không thể cộng chuỗi với số nguyên.

Câu 2: Lệnh tính trung bình có thể sinh lỗi gì?
gttb = sum(A) / len(A)

 Giải thích

Dòng lệnh này dùng để tính giá trị trung bình (trung bình cộng) của các phần tử trong danh sách A.

  • sum(A): Tính tổng tất cả các phần tử trong danh sách A.
  • len(A): Trả về số lượng phần tử của danh sách A.
  • sum(A) / len(A): Lấy tổng chia cho số phần tử để được giá trị trung bình.
  • Kết quả được lưu vào biến gttb (viết tắt của giá trị trung bình).

 

  • NameError – Biến A chưa khai báo.
  • TypeError – A chứa phần tử không phải số.
  • ZeroDivisionError – A là danh sách rỗng (len = 0).
  • Vận Dụng

    Câu 1: Danh sách các ước

    Viết chương trình nhập số tự nhiên n. Xuất danh sách các ước của n. Kiểm tra các khả năng sinh lỗi.

    n = int(input("Nhập n: "))
    uoc = []
    for i in range(1, n + 1):
    if n % i == 0:
    uoc.append(i)
    print("Các ước của", n, "là:", uoc)

    Chương trình tìm và in ra tất cả các ước của số nguyên n.

    • n = int(input("Nhập n: ")): Nhập số nguyên n.
    • uoc = []: Tạo một danh sách rỗng để lưu các ước của n.
    • for i in range(1, n + 1):: Duyệt tất cả các số từ 1 đến n.
    • if n % i == 0:: Kiểm tra xem i có phải là ước của n hay không.
      • Nếu n chia hết cho i, thêm i vào danh sách uoc bằng uoc.append(i).
    • Cuối cùng, in ra danh sách các ước.

     Khả năng sinh lỗi:

    • Nhập không phải số → ValueError
    • Nhập n = 0 → range(1, 1) → danh sách rỗng (logic error)
    • Nhập số âm → range(1, số âm) → không lặp
    Câu 2: Sinh ra NameError

    Viết một chương trình nhỏ để chạy sinh ra NameError.

    print(x)

    Biến x chưa được khai báo → NameError

    📌 Ghi Nhớ

    • ✅ Syntax Error: Lỗi cú pháp – chương trình không chạy được.
    • ✅ Runtime Error (Exception): Lỗi xảy ra khi chương trình đang chạy.
    • ✅ Logic Error: Chương trình chạy nhưng cho kết quả sai.
    • ✅ Các ngoại lệ thường gặp: ZeroDivisionError, IndexError, NameError, TypeError, ValueError, IndentationError.
    • ✅ Cần kiểm tra kỹ các trường hợp có thể gây lỗi khi viết chương trình.
    Fascinating blue spiral design with intricate geometric patterns.

    "Hiểu lỗi – Phân loại lỗi – Sửa lỗi hiệu quả!"

    D. TRẮC NGHIỆM


    Bài cũ hơn Bài mới hơn
    Đọc tiếp:
    Lên đầu trang