🐛 Hiểu và Sửa Lỗi Cơ Bản - Khi Python "Không Hiểu" Bạn Nói Gì
🎯 Điều Quan Trọng Nhất
Gặp lỗi là điều hoàn toàn bình thường! Ngay cả những lập trình viên có 20+ năm kinh nghiệm vẫn gặp lỗi hàng ngày. Lỗi không phải là dấu hiệu bạn không giỏi - mà là cơ hội để học!
🤔 Lỗi Là Gì?
Lỗi (Error) xảy ra khi Python không hiểu hoặc không thể thực hiện những gì bạn yêu cầu. Giống như khi bạn nói tiếng Việt với người nước ngoài - họ sẽ "bối rối" và báo là không hiểu!
🚨 Các Loại Lỗi Phổ Biến
📝 1. Lỗi Cú Pháp (Syntax Error)
Giống như viết sai chính tả hoặc ngữ pháp sai trong tiếng Việt:
# ❌ Quên dấu ngoặc kép đóng
print("Xin chào
# SyntaxError: EOL while scanning string literal
# ❌ Quên dấu hai chấm trong if
if 5 > 3
print("Đúng rồi!")
# SyntaxError: invalid syntax
# ❌ Sai thụt lề (indentation)
if True:
print("Hello")
# IndentationError: expected an indented block
# ✅ Cách viết đúng
print("Xin chào")
if 5 > 3:
print("Đúng rồi!")
🏷️ 2. Lỗi Tên Biến (NameError)
Khi bạn sử dụng biến chưa được tạo:
# ❌ Sử dụng biến chưa tồn tại
print(my_name)
# NameError: name 'my_name' is not defined
# ❌ Viết sai tên biến
friend_name = "An"
print(friend_nickname) # Viết sai tên!
# NameError: name 'friend_nickname' is not defined
# ✅ Cách sửa
my_name = "Minh"
print(my_name) # Ho ạt động bình thường
friend_name = "An"
print(friend_name) # Viết đúng tên biến
🔢 3. Lỗi Kiểu Dữ Liệu (TypeError)
Khi bạn dùng sai kiểu dữ liệu:
# ❌ Không thể cộng số với chuỗi
age = 15
sentence = "Tôi " + age + " tuổi"
# TypeError: can only concatenate str (not "int") to str
# ❌ Không thể chia chuỗi cho số
name = "Python"
result = name / 2
# TypeError: unsupported operand type(s) for /: 'str' and 'int'
# ✅ Cách sửa
age = 15
sentence = "Tôi " + str(age) + " tuổi" # Chuyển số thành chuỗi
# Hoặc dùng f-string
sentence = f"Tôi {age} tuổi"
📋 4. Lỗi Chỉ Số (IndexError)
Khi bạn truy cập vị trí không tồn tại trong chuỗi:
# ❌ Chuỗi chỉ có 6 ký tự (0-5) nhưng truy cập vị trí 10
name = "Python"
character = name[10]
# IndexError: string index out of range
# ✅ Cách sửa - kiểm tra độ dài trước
name = "Python"
if len(name) > 10:
character = name[10]
else:
print(f"Chuỗi chỉ có {len(name)} ký tự")
🔍 Đọc Hiểu Thông Báo Lỗi
Python báo lỗi rất chi tiết, hãy học cách đọc:
# Code có lỗi
name = "Minh"
age = 15
introduction = name + age
Thông báo lỗi:
Traceback (most recent call last):
File "test.py", line 3, in <module>
introduction = name + age
TypeError: can only concatenate str (not "int") to str
Cách đọc:
- File "test.py", line 3 → Lỗi ở file
test.py
, dòng 3 - introduction = name + age → Dòng code gây lỗi
- TypeError → Loại lỗi (lỗi kiểu dữ liệu)
- can only concatenate str (not "int") to str → Giải thích: chỉ có thể nối chuỗi với chuỗi, không thể nối với số
🔧 Chiến Lược Sửa Lỗi
🕵️ 1. Phương Pháp Thám Tử
# Khi không biết lỗi ở đâu, hãy "thăm dò"
print("Checkpoint 1: Bắt đầu chương trình")
name = "An"
print(f"Checkpoint 2: name = {name}")
age = 16
print(f"Checkpoint 3: age = {age}")
# Dòng này có thể có lỗi
result = name + age # Lỗi ở đây!
print(f"Checkpoint 4: result = {result}")
print("Checkpoint 5: Kết thúc chương trình")
🧪 2. Kiểm Tra Kiểu Dữ Liệu
# Khi không chắc kiểu dữ liệu
suspicious_variable = input("Nhập một số: ") # input() luôn trả về string!
print(f"Giá trị: {suspicious_variable}")
print(f"Kiểu: {type(suspicious_variable)}")
# Chuyển đổi an toàn
try:
number = int(suspicious_variable)
print(f"Đã chuyển thành số: {number}")
except ValueError:
print("Không thể chuyển thành số!")
🎯 3. Chia Nhỏ Vấn Đề
# Thay vì viết một dòng phức tạp
# result = (int(input("Số thứ nhất: ")) + int(input("Số thứ hai: "))) / 2
# Hãy chia nhỏ ra
print("Nhập số thứ nhất:")
num_1_str = input()
print(f"Bạn nhập: '{num_1_str}'")
num_1 = int(num_1_str)
print(f"Chuyển thành số: {num_1}")
print("Nhập số thứ hai:")
num_2_str = input()
num_2 = int(num_2_str)
total = num_1 + num_2
print(f"Tổng: {total}")
average = total / 2
print(f"Trung bình: {average}")