ต้องจัดรูปแบบสตริง Python โดยใช้จำนวนอาร์กิวเมนต์ที่ถูกต้อง เมื่อจำนวนอาร์กิวเมนต์ที่คุณระบุน้อยกว่าจำนวนค่าที่คุณต้องการจัดรูปแบบเป็นสตริง คุณพบข้อผิดพลาดเช่น "TypeError:อาร์กิวเมนต์ไม่เพียงพอสำหรับสตริงรูปแบบ"
ในคู่มือนี้ เราจะพูดถึงความหมายของข้อผิดพลาดนี้และสาเหตุที่ทำให้เกิดข้อผิดพลาดนี้ขึ้น เราอธิบายตัวอย่างเพื่อช่วยให้คุณเข้าใจวิธีแก้ไขข้อผิดพลาดนี้ในโค้ดของคุณ
TypeError:อาร์กิวเมนต์ไม่เพียงพอสำหรับสตริงรูปแบบ
ข้อผิดพลาดของเราคือ TypeError ซึ่งหมายความว่าเราได้พยายามทำบางสิ่งกับค่าที่ชนิดข้อมูลพื้นฐานไม่สนับสนุนการดำเนินการนั้น
ในกรณีนี้ เราทำงานกับการจัดรูปแบบสตริง Python บอกเราว่าเราได้ทำผิดพลาดในการจัดรูปแบบสตริง
เมื่อคุณจัดรูปแบบสตริง จำนวนอาร์กิวเมนต์ที่คุณระบุจะต้องเท่ากับจำนวนค่าที่คุณต้องการจัดรูปแบบ มิฉะนั้น คุณจะพบข้อผิดพลาด
ตัวอย่างสถานการณ์
สถานการณ์ทั่วไปที่เกิดข้อผิดพลาดนี้คือเมื่อคุณลืมใส่อาร์กิวเมนต์ในรูปแบบสตริง % ในวงเล็บ ไวยากรณ์นี้ใช้ตัวดำเนินการ % เพื่อเพิ่มค่าลงในสตริง
ที่นี่ เราสร้างแอปที่จัดรูปแบบรายชื่อนักเรียนที่อยู่ในตำแหน่งกิตติมศักดิ์เป็นสตริง เราเริ่มต้นด้วยการกำหนดรายชื่อนักเรียน:
students = ["Andy", "Malcolm", "Lindsay", "Lucy"]
ต่อไป เราจัดรูปแบบค่าเหล่านี้เป็นสตริงโดยใช้รูปแบบ %:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
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)
เราจัดรูปแบบชื่อทั้งสี่จากอาร์เรย์ "นักเรียน" ของเราลงในสตริง "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:แก้ไขไวยากรณ์การจัดรูปแบบสตริง
เราทำผิดพลาดในการจัดรูปแบบสตริง เมื่อใช้ตัวดำเนินการ % ค่าที่คุณต้องการเพิ่มลงในสตริงจะต้องอยู่ในวงเล็บ
ในตัวอย่างข้างต้น เราระบุค่าที่จะเพิ่มภายในสตริงเป็นรายการค่าที่คั่นด้วยเครื่องหมายจุลภาค รายการนี้ไม่ปรากฏในวงเล็บ
เราแก้ไขข้อผิดพลาดโดยการใส่ค่าตามวงเล็บ % sign in:
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:อาร์กิวเมนต์ไม่เพียงพอสำหรับสตริงรูปแบบ" จะเพิ่มขึ้นเมื่อจำนวนอาร์กิวเมนต์ที่ระบุในการดำเนินการรูปแบบสตริงไม่เท่ากับจำนวนค่าที่คุณต้องการเพิ่มลงในสตริง
ในการแก้ปัญหานี้ ก่อนอื่นให้แน่ใจว่าคุณใส่อาร์กิวเมนต์ทั้งหมดในวงเล็บปีกกา () หากคุณใช้ตัวดำเนินการ % คุณสามารถใช้ .format()
วิธีแทนที่ไวยากรณ์% หากคุณต้องการแก้ไขข้อผิดพลาดนี้และทำให้โค้ดของคุณทันสมัย
ตอนนี้คุณพร้อมที่จะแก้ไขข้อผิดพลาดทั่วไปของ Python อย่างผู้เชี่ยวชาญแล้ว!