Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

แก้ไข IndentationError: unexpected indent ใน Python

IndentationErrors ช่วยทำให้โค้ดอ่านง่ายขึ้นและช่วยให้ Python interpreter เข้าใจโครงสร้างโค้ดได้ถูกต้อง หากคุณเพิ่ม space หรือ tab ที่ไม่จำเป็น จะพบข้อผิดพลาด "IndentationError: unexpected indent"

ทำความเข้าใจ IndentationError: unexpected indent

Indentation (การเยื้อง) คือการใช้จำนวน space หรือ tab เฉพาะเพื่อระบุว่าบรรทัดโค้ดนั้นเป็นส่วนหนึ่งของบล็อกโค้ดใดบล็อกหนึ่ง ตัวอย่างโปรแกรมต่อไปนี้:

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

เราได้กำหนดฟังก์ชันเดียวคือ hello_world() ซึ่งมีคำสั่ง print อยู่ข้างใน เพื่อบอก Python ว่าบรรทัดนี้เป็นส่วนหนึ่งของฟังก์ชัน เราจึงเยื้องบรรทัดนั้นเข้าไป

คุณสามารถเยื้องโค้ดได้ทั้งด้วย spaces หรือ tabs ขึ้นอยู่กับความชอบ แต่ควรเยื้องเฉพาะเมื่อโค้ดนั้นควรเป็นส่วนหนึ่งของบล็อกโค้ดอื่น เช่นใน:

  • Statement "if...else"
  • Statement "try...except"
  • Loop "for"
  • Statement "function"

Python กำหนดให้ indentation ต้องสอดคล้องกันอย่างเคร่งครัดหากโค้ดปรากฏใน statement พิเศษ Python บังคับ indentation อย่างเข้มงวด

บางภาษาเช่น JavaScript ไม่บังคับ indentation เพราะใช้ curly braces กำหนดบล็อกโค้ด แต่ Python ไม่มีฟีเจอร์นี้ จึงอาศัย indentation มาก

สาเหตุของ "IndentationError: unexpected indent" คือการเยื้องโค้ดมากเกินไป หรือใช้ tabs และ spaces มากเกินไปในการเยื้องบรรทัดโค้ด

ข้อผิดพลาด indentation อื่นที่อาจพบ:

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

ตัวอย่างสถานการณ์

เราจะสร้างโปรแกรมที่วนลูปผ่าน list ของการซื้อสินค้าและพิมพ์รายการที่มีมูลค่ามากกว่า $25.00 ออกมา

เริ่มต้นด้วยการกำหนด list ของการซื้อ:

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

ต่อมา กำหนดฟังก์ชันเพื่อวนลูปและพิมพ์รายการที่มูลค่าเกิน $25:

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

ฟังก์ชัน show_high_purchases() รับอาร์กิวเมนต์หนึ่งคือ list ของการซื้อ ฟังก์ชันวนลูปผ่าน list และใช้ if statement ตรวจสอบว่าแต่ละรายการมีมูลค่ามากกว่า $25.00 หรือไม่

หากมูลค่ามากกว่า $25.00 จะพิมพ์คำว่า Purchase: ตามด้วยราคาของรายการนั้น มิฉะนั้นจะไม่ทำอะไร

ก่อนรันโค้ด เราเรียกฟังก์ชันและส่ง list purchases เป็นพารามิเตอร์:

show_high_purchases(purchases)

ลองรันโค้ดดู:

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

โค้ดรันไม่สำเร็จ

วิธีแก้ไข

อ่านข้อความข้อผิดพลาดเต็มๆ เพื่อดูว่าปัญหาอยู่ที่ไหน ปัญหาอยู่ที่บรรทัดที่ 7 ซึ่งเป็นบรรทัดที่พิมพ์ค่าของการซื้อ

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

เราเยื้องคำสั่ง print() ที่สองโดยไม่ได้ตั้งใจ ทำให้เกิดข้อผิดพลาด เพราะคำสั่ง print() ที่สองไม่ได้เป็นส่วนหนึ่งของบล็อกโค้ดอื่น มันยังคงเป็นส่วนหนึ่งของ if statement

เพื่อแก้ไข เราต้องให้คำสั่ง print() ทั้งสองมีระดับ indentation เท่ากัน:

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

ทั้งสองคำสั่ง print() ควรมี indentation เท่ากันเพราะเป็นส่วนหนึ่งของ if statement เดียวกัน เราได้แก้ไขแล้ว

ลองรันโค้ดใหม่:

Purchase: 25.5
Purchase: 29.9
Purchase: 57.6

โค้ดทำงานสำเร็จและพิมพ์รายการซื้อที่มีมูลค่ามากกว่า $25.00 ทั้งหมด

สรุป

"IndentationError: unexpected indent" เกิดขึ้นเมื่อคุณเยื้องบรรทัดโค้ดมากเกินไป วิธีแก้คือให้แน่ใจว่าโค้ดทั้งหมดใช้ indentation อย่างสอดคล้อง และไม่มี indentation ที่ไม่จำเป็น

ตอนนี้คุณพร้อมแก้ไขข้อผิดพลาดนี้อย่างมืออาชีพแล้ว!