Errors & testing · Lỗi & kiểm thử
Three kinds of error
- A syntax error breaks the rules of Python, so the code will not run.
- A runtime error crashes the program while it is running.
- A logic error runs fine but gives the wrong answer.
Ba loại lỗi
- Lỗi cú pháp vi phạm các quy tắc của Python, khiến mã không thể chạy.
- Lỗi thời gian chạy làm chương trình bị sập trong khi đang thực thi.
- Lỗi logic chạy bình thường nhưng đưa ra kết quả sai.
Syntax errors
- These are typos: a missing
:, an unclosed quote, a wrong indent. - Python refuses to start and shows you the line.
- Fix the spelling or punctuation, then run again.
Lỗi cú pháp
- Đây là những lỗi đánh máy: thiếu
:, dấu ngoặc kép chưa đóng, hoặc thụt lề sai. - Python từ chối bắt đầu và hiển thị dòng code gây ra lỗi.
- Sửa lại chính tả hoặc dấu câu, sau đó chạy lại.
Runtime errors
- The code starts, then hits something it cannot do.
- Examples:
10 / 0, orint("hello"), or reading past the end of a list. - The program stops at that line with a message.
Lỗi thời gian chạy
- Mã bắt đầu chạy, sau đó gặp phải một hành động mà nó không thể thực hiện.
- Ví dụ:
10 / 0, hoặcint("hello"), hoặc đọc vượt quá cuối danh sách. - Chương trình dừng lại tại dòng đó với một thông báo lỗi.
Logic errors
- The program runs to the end but the result is wrong.
- Example: using
-where you meant+, or stopping a loop too early. - These are the hardest to find — the computer did exactly what you wrote.
Lỗi logic
- Chương trình chạy đến hết nhưng kết quả thu được lại sai.
- Ví dụ: sử dụng
-nơi bạn có ý định dùng+, hoặc dừng vòng lặp quá sớm. - Đây là loại khó tìm nhất — máy tính đã làm đúng y hệt những gì bạn viết.
Read the traceback
- When a program crashes, Python prints a traceback.
- Read the last line first: it names the error and what went wrong.
- The line number tells you where to look.
Đọc traceback (báo cáo lỗi)
- Khi chương trình bị sập, Python sẽ in ra một traceback (báo cáo lỗi).
- Đọc dòng cuối đầu tiên: nó nêu tên lỗi và những gì đã sai.
- Số dòng cho biết bạn cần tìm ở đâu.
Traceback (most recent call last):
File "<program>", line 2, in <module>
print(10 / 0)
ZeroDivisionError: division by zero
Test with chosen data
- Do not trust code until you have tested it.
- Use normal data, boundary data (like
0), and extreme data. - Check each answer against what you worked out by hand.
Thử nghiệm với dữ liệu đã chọn
- Đừng tin vào mã nguồn cho đến khi bạn đã kiểm tra nó.
- Sử dụng dữ liệu thường, dữ liệu biên (như
0), và dữ liệu cực trị. - Kiểm tra từng kết quả đối chiếu với những gì bạn tính bằng tay.
def square(n):
return n * n
print(square(3)) # normal -> 9
print(square(0)) # boundary -> 0
print(square(-2)) # negative -> 4
Common mistakes
- A syntax error stops the program before it runs, so fix those first.
- Catch a specific error with
except ValueError:, not a bareexcept:. - Test the tricky cases (empty, zero, the biggest), not just the easy one.
Lỗi thường gặp
- Lỗi cú pháp dừng chương trình trước khi chạy, vì vậy hãy sửa những lỗi đó trước.
- Bắt lỗi cụ thể bằng
except ValueError:, chứ không phảiexcept:trống. - Thử các trường hợp khó (rỗng, bằng không, lớn nhất), không chỉ trường hợp dễ.
Now you try
- Each task has a logic error to fix, or a crash to prevent.
- Press Check answer to test your fix against several cases.
Bây giờ bạn thử
- Mỗi nhiệm vụ đều có một lỗi logic cần sửa, hoặc một sự cố cần ngăn chặn.
- Nhấn Kiểm tra đáp án để thử nghiệm cách sửa của bạn trên nhiều trường hợp.
Find and fix a bug · Tìm và sửa lỗi
Testing is a cycle: run it, see what's wrong, fix, run again. · Kiểm thử là một vòng lặp: chạy nó, xem cái gì sai, sửa, chạy lại.
This function should add a and b, but it has a logic error — it subtracts. Fix it so it returns the sum. · Hàm này nên cộng a và b, nhưng nó có lỗi logic — nó trừ. Sửa lại để nó trả về tổng.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
sum_to(n) should return 1 + 2 + ... + n, but it stops one number too early (an off-by-one logic error). Fix the range so it includes n. · sum_to(n) nên trả về 1 + 2 + ... + n, nhưng nó dừng lại sớm hơn một bước (lỗi logic lệch một đơn vị). Sửa đổi range để bao gồm cả n.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
Write safe_divide(a, b) that returns a / b, but prevents a runtime crash: if b is 0, return 0 instead. · Viết safe_divide(a, b) trả về a / b, nhưng chống lại lỗi chạy thời gian thực: nếu b bằng 0, thay vì vậy hãy trả về 0.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
average(nums) has two bugs: it divides by the wrong number, and it crashes on an empty list. Fix both, so average([2, 4, 6]) is 4 and average([]) is 0. · average(nums) có hai lỗi: nó chia cho số sai, và nó sập khi gặp danh sách rỗng. Sửa cả hai, vậy average([2, 4, 6]) là 4 và average([]) là 0.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.