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

แก้ไข Python TypeError: not enough arguments for format string

สตริง 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 ทั่วไปนี้อย่างมืออาชีพแล้ว!