Bạn có thể thụt lề mã dùng khoảng trắng (spaces) hoặc tab trong chương trình Python. Nếu bạn thử dùng kết hợp cả hai trong cùng khối mã, bạn sẽ gặp lỗi TabError: inconsistent use of tabs and spaces in indentation.
Trong hướng dẫn này, chúng ta thảo luận ý nghĩa lỗi này và tại sao nó được ném ra. Chúng ta sẽ đi qua ví dụ để bạn tìm ra cách khắc phục trong mã.
TabError: inconsistent use of tabs and spaces in indentation
Mặc dù hướng dẫn phong cách Python khuyến khích dùng khoảng trắng làm phương pháp thụt lề ưu tiên khi lập trình Python, bạn có thể dùng cả khoảng trắng hoặc tab.
Thụt lề quan trọng trong Python vì ngôn ngữ không phụ thuộc vào cú pháp như ngoặc nhọn để biểu thị nơi khối mã bắt đầu và kết thúc. Thụt lề báo cho Python biết dòng mã nào thuộc khối mã nào.
Xét chương trình sau:
numbers = [8, 7, 9, 8, 7]
def calculate_average_age():
average = sum(numbers) / len(numbers)
print(average)
Nếu không thụt lề, không thể biết dòng mã nào nên thuộc hàm calculate_average_age và dòng nào thuộc chương trình chính.
Bạn phải kiên trì dùng một trong hai phương pháp thụt lề. Không trộn tab và khoảng trắng. Làm vậy sẽ làm 혼란 trình thông dịch Python và gây lỗi TabError: inconsistent use of tabs and spaces in indentation.
Ví dụ minh họa
Chúng ta muốn xây dựng chương trình tính tổng giá trị mua hàng tại cửa hàng bánh donut. Đầu tiên, định nghĩa danh sách mua hàng:
purchases = [2.50, 4.90, 5.60, 2.40]
Tiếp theo, định nghĩa hàm tính tổng danh sách "purchases":
def calculate_total_purchases(purchases):
total = sum(purchases)
return total
Hàm chấp nhận một tham số: danh sách mua hàng mà giá trị tổng chúng ta muốn tính. Hàm trả về giá trị tổng của danh sách chỉ định.
Chúng ta dùng phương thức sum() tính tổng số trong danh sách "purchases".
Nếu bạn copy đoạn mã này vào trình soạn thảo, bạn có thể nhận thấy dòng "return total" được thụt lề bằng khoảng trắng trong khi "total = sum(purchases)" dùng tab. Đây là sự khác biệt quan trọng.
Tiếp theo, gọi hàm và in giá trị trả về ra console:
total_purchases = calculate_total_purchases(purchases) print(total_purchases)
Mã gọi hàm calculate_total_purchases() tính tổng giá trị tất cả mua hàng tại cửa hàng bánh donut. Sau đó in giá trị đó ra console. Chạy mã:
File "test1.py", line 5
return total
^
TabError: inconsistent use of tabs and spaces in indentation
Mã trả về lỗi.
Giải pháp
Chúng ta dùng cả khoảng trắng và tab để thụt lề mã. Trong chương trình Python, bạn nên kiên trì dùng một trong hai phương pháp.
Để sửa mã, thay đổi hàm để chỉ dùng khoảng trắng:
def calculate_total_purchases(purchases):
total = sum(purchases)
return total
Mã dùng 4 khoảng trắng cho thụt lề. Chạy chương trình với thụt lề mới:
15.4
Chương trình tính thành công tổng giá trị mua hàng bánh donut.
Trong trình soạn thảo IDLE, bạn có thể xóa thụt lề cho khối mã theo hướng dẫn:
- Chọn mã muốn xóa thụt lề
- Nhấp "Menu" -> "Format" -> "Untabify region"
- Chèn loại thụt lề bạn muốn dùng
Đây là cách thuận tiện sửa định dạng tài liệu, giả sử bạn dùng IDLE. Nhiều trình soạn thảo khác, như Sublime Text, có phương pháp riêng thay đổi thụt lề trong file.
Kết luận
Lỗi Python TabError: inconsistent use of tabs and spaces in indentation xảy ra khi bạn thụt lề mã dùng cả khoảng trắng và tab.
Bạn khắc phục lỗi bằng cách kiên trì dùng khoảng trắng hoặc tab trong chương trình và thay thế tab hoặc khoảng trắng không dùng phương pháp ưa thích. Bây giờ bạn đã có kiến thức khắc phục lỗi này như lập trình viên chuyên nghiệp!