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 ที่ไม่จำเป็น
ตอนนี้คุณพร้อมแก้ไขข้อผิดพลาดนี้อย่างมืออาชีพแล้ว!