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

Python TypeError:อาร์กิวเมนต์ไม่เพียงพอสำหรับสตริงรูปแบบ Solution

ต้องจัดรูปแบบสตริง 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 อย่างผู้เชี่ยวชาญแล้ว!