สตริง Python ต้องถูกจัดรูปแบบโดยใช้อาร์กิวเมนต์จำนวนที่ถูกต้อง เมื่อจำนวนอาร์กิวเมนต์ที่คุณระบุน้อยกว่าจำนวนค่าที่คุณต้องการจัดรูปแบบเข้าไปในสตริง คุณจะเจอข้อผิดพลาดแบบ "TypeError: not enough arguments for format string"
ในคู่มือนี้ เราพูดถึงว่าข้อผิดพลาดนี้หมายถึงอะไรและทำไมมันจึงถูกยกขึ้น เราจะเดินทางผ่านตัวอย่างเพื่อช่วยคุณเข้าใจว่าคุณสามารถแก้ไขข้อผิดพลาดนี้ในโค้ดของคุณได้อย่างไร
TypeError: not enough arguments for format string
ข้อผิดพลาดของเราคือ TypeError นี่หมายความว่าเราพยายามทำบางอย่างบนค่าที่ชนิดข้อมูลพื้นฐานของมันไม่รองรับการดำเนินการนั้น
ในกรณีนี้ เราทำงานกับการจัดรูปแบบสตริง Python บอกเราว่าเราทำผิดในการจัดรูปแบบสตริง
เมื่อคุณจัดรูปแบบสตริง จำนวนอาร์กิวเมนต์ที่คุณระบุต้องเท่ากับจำนวนค่าที่คุณต้องการจัดรูปแบบ มิฉะนั้น คุณจะเจอข้อผิดพลาด
สถานการณ์ตัวอย่าง
สถานการณ์ทั่วไปที่ข้อผิดพลาดนี้ถูกยกขึ้นคือเมื่อคุณลืมล้อมอาร์กิวเมนต์ใน % string format ไว้ในวงเล็บ ไวยากรณ์นี้ใช้ตัวดำเนินการ % เพื่อเพิ่มค่าเข้าไปในสตริง
ที่นี่ เราสร้างแอปที่จัดรูปแบบรายชื่อนักเรียนที่อยู่บนบัญชีเกียรติยศ (honor roll) เข้าไปในสตริง เราเริ่มต้นด้วยการกำหนดรายการชื่อนักเรียน:
students = ["Andy", "Malcolm", "Lindsay", "Lucy"]
ต่อไป เราจัดรูปแบบค่าเหล่านี้เข้าไปในสตริงโดยใช้ไวยากรณ์ %:
81% of participants stated they felt more confident about their tech job prospects after attending a bootcamp. Get matched to a bootcamp today.
The average bootcamp grad spent less than six months in career transition, from starting a bootcamp to finding their first job.
honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % students[0], students[1], students[2], students[3] print(honor_roll)
เราจัดรูปแบบชื่อทั้งสี่จากอาร์เรย์ "students" ของเราเข้าไปในสตริง "honor_roll" เราใช้ %s ภายในสตริงของเราเพื่อระบุว่าควรจัดรูปแบบค่าที่ไหน ตัวดำเนินการ % ถูกใช้หลังสตริงเพื่อระบุค่าที่เราต้องการเพิ่มเข้าไปในสตริงของเรา
รันโค้ดของเราและ看看发生什么:
Traceback (most recent call last): File "main.py", line 3, in <module> honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % students[0], students[1], students[2], students[3] TypeError: not enough arguments for format string
Python พบข้อผิดพลาด มา看看เราสามารถแก้ไขได้อย่างไร
วิธีแก้ไข #1: แก้ไขไวยากรณ์การจัดรูปแบบสตริง (Fix String Formatting Syntax)
เราทำผิดในการจัดรูปแบบสตริง เมื่อใช้ตัวดำเนินการ % ค่าที่คุณต้องการเพิ่มเข้าไปในสตริงต้องถูกล้อมภายในวงเล็บ
ในตัวอย่างข้างต้น เราระบุค่าที่จะเพิ่มเข้าไปในสตริงของเราเป็นรายการค่าที่คั่นด้วยคอมม่า รายการนี้ไม่ปรากฏในวงเล็บ
เราแก้ไขข้อผิดพลาดของเราโดยล้อมค่าที่ตามเครื่องหมาย % ไว้ในวงเล็บ:
honor_roll = "%s, %s, %s, and %s are on the CK High School Honor Roll." % (students[0], students[1], students[2], students[3])
มารันโค้ดของเรา:
Andy, Malcolm, Lindsay, and Lucy are on the CK High School Honor Roll.
โค้ดของเราคืนค่าข้อความแจ้งเตือนเราเกี่ยวกับนักเรียนบนบัญชีเกียรติยศสำเร็จแล้ว
วิธีแก้ไข #2: ใช้ .format()
ไวยากรณ์ % เริ่มล้าสมัย มีวิธีการจัดรูปแบบสตริงอื่นๆ เช่น เมธอด .format() ซึ่งได้รับความนิยมในโค้ด Python สมัยใหม่
เพื่อแก้ปัญหาของเรา เราสามารถใช้ไวยากรณ์ .format() แทนไวยากรณ์ %:
honor_roll = "{}, {}, {}, and {} are on the CK High School Honor Roll.".format(students[0], students[1], students[2], students[3]) โครงสร้างของไวยากรณ์นี้คล้ายกับวิธี % ในสตริงของเรา เราใช้วงเล็บ {} เพื่อระบุว่าต้องการเพิ่มค่าที่ไหน
เราใช้เมธอด .format() เพื่อระบุลิสต์ค่าที่เราต้องการเพิ่มเข้าไปในสตริงของเรา มารันโค้ดของเรา:
Andy, Malcolm, Lindsay, and Lucy are on the CK High School Honor Roll.
โปรแกรมของเราแสดงรายชื่อนักเรียนที่อยู่บนบัญชีเกียรติยศสำเร็จแล้ว รายการนี้จัดรูปแบบเป็นส่วนหนึ่งของสตริง
สรุป
ข้อผิดพลาด "TypeError: not enough arguments for format string" ถูกยกขึ้นเมื่อจำนวนอาร์กิวเมนต์ที่ระบุในการดำเนินการจัดรูปแบบสตริงไม่เท่ากับจำนวนค่าที่คุณต้องการเพิ่มเข้าไปในสตริง
เพื่อแก้ปัญหานี้ ตรวจสอบก่อนว่าคุณล้อมอาร์กิวเมนต์ทั้งหมดไว้ในวงเล็บ () หากคุณใช้ตัวดำเนินการ % คุณสามารถใช้เมธอด .format() เป็นการแทนที่สำหรับไวยากรณ์ % หากคุณต้องการแก้ไขข้อผิดพลาดนี้และทันสมัยโค้ดของคุณ
ตอนนี้คุณพร้อมที่จะแก้ไขข้อผิดพลาด Python ทั่วไปนี้อย่างมืออาชีพแล้ว!