Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Giải pháp lỗi Python IndentationError: unexpected indent

IndentationError (lỗi thụt lề) có hai mục đích: giúp mã dễ đọc hơn và đảm bảo trình thông dịch Python hiểu đúng mã. Nếu bạn thêm khoảng trắng hoặc tab không cần thiết, bạn sẽ gặp lỗi IndentationError: unexpected indent.

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.

IndentationError: unexpected indent

Một thụt lề (indent) là số khoảng trắng hoặc tab cụ thể biểu thị dòng mã thuộc khối mã cụ thể. Xét chương trình:

def hello_world():
    print("Hello, world!")

Chúng ta định nghĩa hàm đơn: hello_world(). Hàm chứa câu lệnh print. Để báo cho Python dòng này thuộc hàm, chúng ta thụt lề.

Bạn có thể thụt lề dùng khoảng trắng hoặc tab, tùy thích. Bạn chỉ nên thụt lề nếu mã đó nên thuộc khối mã khác. Bao gồm khi viết mã trong:

  • Câu lệnh "if...else"
  • Câu lệnh "try...except"
  • Vòng lặp "for"
  • Câu lệnh "function"

Mã Python phải được thụt lề nhất quán nếu xuất hiện trong câu lệnh đặc biệt. Python thực thi thụt lề nghiêm ngặt.

Một số ngôn ngữ như JavaScript không thực thi thụt lề nghiêm ngặt vì dùng ngoặc nhọn biểu thị khối mã. Python không có tính năng này, nên phụ thuộc nhiều vào thụt lề.

Nguyên nhân lỗi IndentationError: unexpected indent là thụt lề mã quá sâu, hoặc dùng quá nhiều tab và khoảng trắng cho một dòng.

Các lỗi thụt lề khác bạn có thể gặp:

  • Unindent does not match any other indentation level
  • Expected an indented block

Ví dụ minh họa

Chúng ta xây dựng chương trình lặp qua danh sách mua hàng người dùng làm và in ra những cái giá trị trên $25.00.

Đầu tiên, định nghĩa danh sách mua hàng:

purchases = [25.50, 29.90, 2.40, 57.60, 24.90, 1.55]

Tiếp theo, định nghĩa hàm lặp qua danh sách và in mua hàng trên $25:

def show_high_purchases(purchases):
    for p in purchases:
        if p > 25.00:
            print("Purchase: ")
            print(p)

Hàm show_high_purchases() chấp nhận một đối số: danh sách mua hàng hàm sẽ tìm kiếm. Hàm lặp qua danh sách và dùng if kiểm tra mỗi mua hàng có giá trị hơn $25.00.

Nếu mua hàng lớn hơn $25.00, câu lệnh Purchase: in ra console. Sau đó, giá mua hàng in ra. Ngược lại, không có gì xảy ra.

Trước khi chạy, gọi hàm và truyền danh sách mua hàng như tham số:

show_high_purchases(purchases)

Chạy mã:

 File "main.py", line 7
    print(p)
    ^
IndentationError: unexpected indent

Mã không chạy thành công.

Giải pháp

Giống mọi lỗi Python, đọc toàn bộ thông báo lỗi để thấy vấn đề. Vấn đề xuất hiện dòng 7, nơi in giá trị mua hàng.

if p > 25.00:
    print("Purchase: ")
    print(p)

Chúng ta vô tình thụt lề câu lệnh print() thứ hai. Điều này gây lỗi vì câu lệnh print() thứ hai không thuộc khối mã khác. Nó vẫn thuộc câu lệnh if.

Để khắc phục, đảm bảo thụt lề nhất quán tất cả câu lệnh print():

if p > 25.00:
    print("Purchase: ")
    print(p)

Cả hai print() nên dùng cùng cấp thụt lề vì thuộc cùng câu lệnh if. Chúng ta đã sửa.

Thử chạy mã:

Purchase: 25.5
Purchase: 29.9
Purchase: 57.6

Mã in thành công tất cả mua hàng giá trị hơn $25.00.

Kết luận

IndentationError: unexpected indent xảy ra khi bạn thụt lề một dòng quá nhiều lần. Để khắc phục, đảm bảo tất cả mã dùng thụt lề nhất quán và không có thụt lề không cần thiết.

Bây giờ bạn đã sẵn sàng khắc phục lỗi này như chuyên gia Python!