ข้อผิดพลาด“ ValueError: ชื่อฟิลด์ความยาวเป็นศูนย์ในรูปแบบ” ใน Python 3.0,3.1,3.2


120

ฉันกำลังพยายามเรียนรู้ Python (3 เพื่อให้เจาะจงมากขึ้น) และได้รับข้อผิดพลาดนี้:

ValueError: zero length field name in format

ฉัน googled มันและพบว่าคุณต้องระบุตัวเลข:

a, b = 0, 1
if a < b:
     print('a ({0}) is less than b ({1})'.format(a, b))
else:
     print('a ({0}) is not less than b ({1})'.format(a, b))

และไม่เหมือนบทช่วยสอน (จาก lynda.com) บอกว่าให้ทำ:

a, b = 0, 1
if a < b:
     print('a ({}) is less than b ({})'.format(a, b))
else:
     print('a ({}) is not less than b ({})'.format(a, b))

บทช่วยสอนฉันต่อไปนี้มี Python 3.1 และฉันใช้ 3.2 และสิ่งที่ฉันอ่านเกี่ยวกับข้อผิดพลาดนี้คือสิ่งนี้เกิดขึ้นใน <3.1 (3.0) เท่านั้น พวกเขาเลิกทำสิ่งนี้ใน 3.2 หรือว่าฉันทำอะไรผิด?

พูดช้าๆด้วย;) นี่เป็นคืนแรกของฉันที่เรียนภาษา Python และมีเพียง "script" ตัวที่ 2 ที่ฉันเขียนด้วยภาษา Python


1
ลองเพิ่มสิ่งนี้: import sys; พิมพ์ (sys.version) เพื่อให้แน่ใจว่าคุณไม่ได้เรียก python เวอร์ชันอื่นโดยไม่ได้ตั้งใจ
Winston Ewert

คำตอบ:


131

ฉันจะเดาว่าคุณกำลังใช้ python 2.6 โดยบังเอิญ

คุณลักษณะนี้มีให้ใช้งานอย่างน้อย 3.1 หากคุณใช้ python 3 หรือ 2.7 หากคุณใช้ python 2


3
ขอบคุณ! แค่นั้นเอง! ต้องเปลี่ยน Shebangs ของฉันเป็น: #! /usr/local/bin/python3หลังจากดูทั้งหมด มี 3 ตำแหน่งที่แตกต่างกันของการติดตั้ง python บน Mac -_- wtf
Oscar Godson

4
สิ่งนี้ถูกต้องบางส่วน: รหัสของ OP จะใช้งานได้ถ้าเป็น python 2.7 แต่ไม่ใช่ 2.6 (ดูคำตอบของ @Dennis Williamson)
mayhewsw

ฉันได้รับปัญหานี้กับ Python 3.0.1 บน Windows (แน่นอนว่า 3.0.1 ในบรรทัดแรกหลังจากเริ่ม Python cmdline)
inger

@inger คุณต้องใช้ python 3.1 เพื่อใช้งาน
Winston Ewert

อืมขอบคุณสำหรับการตอบกลับอย่างรวดเร็ว .. อย่างไรก็ตามคำตอบด้านล่างระบุว่า "2.7 ขึ้นไป" - 3.0.1 ก่อนหน้านี้หรือไม่ นอกจากนี้ OP ถามเกี่ยวกับปัญหาใน 3.0 (+ อื่น ๆ ) - ซึ่งคำตอบของคุณคือ "คุณกำลังใช้ 2.6" ซึ่งจะแนะนำว่า 3.0 เองก็โอเค คงจะดีไม่น้อยหากคุณสามารถอัปเดตคำตอบได้ ขอบคุณ
inger

148

Python 2.6 และ 3.0 ต้องการหมายเลขฟิลด์ ใน Python 2.7 ขึ้นไปและ 3.1 ขึ้นไปสามารถละเว้นได้

การเปลี่ยนแปลงในเวอร์ชัน 2.7: สามารถละเว้นตัวระบุอาร์กิวเมนต์ตำแหน่งได้ดังนั้น "{} {}" จึงเทียบเท่ากับ "{0} {1}"

python2.6.4>>> print '|{0:^12}|{1:^12}|'.format(3,4)
|     3      |     4     |

2
ความแตกต่างของรุ่นทำให้ฉันตื่นขึ้นในวันนี้! ขอบคุณสำหรับตัวชี้
Richard Clayton

@ เดนนิส: ฉันโหวตให้กับคำตอบของคุณเพราะคุณได้แสดงวิธีแก้ปัญหาใน python เวอร์ชันก่อนหน้าโดยระบุหมายเลขฟิลด์ อย่างไรก็ตามการพูดว่า "Python 2.7 และใหม่กว่า" ดูเหมือนจะทำให้ฉันเข้าใจผิดเพราะตามคำตอบอื่น ๆ ที่นี่หมายเลขฟิลด์จำเป็นใน Python 3.0 Winston ชี้ให้เห็นในความคิดเห็นล่าสุดเกี่ยวกับคำตอบของเขาที่ 2.7 ออกมาหลังจาก 3.0 ดังนั้นคำสั่งของคุณอาจถูกต้องตามลำดับเวลา แต่พวกเราส่วนใหญ่จะอ่านว่ามันบ่งชี้ว่าวงเล็บปีกกาว่างควรทำงานใน 3.0
Tom Barron

@ TomBarron: วงเล็บปีกกาเปล่าใช้ได้กับฉัน: python3.4 -c 'print("|{}|{}|".format(3,4))'แต่เห็นได้ชัดว่า 3.0 ไม่มี (3.1 ขึ้นไป) ฉันจะชี้แจงคำตอบของฉัน
หยุดชั่วคราวจนกว่าจะมีประกาศอีกครั้ง

2

หากคุณใช้ Eclipse คุณควรดูที่ Window -> Preferences -> PyDev -> Interpreter - Python คุณมีรายชื่อล่าม (พร้อมชื่อและที่ตั้ง) หากสำหรับโปรเจ็กต์ปัจจุบันของคุณคุณกำลังใช้ล่ามซึ่งอยู่ในตัวอย่างเช่นใน / usr / bin / python อาจเรียกใช้ / usr / bin / python -V แต่จะให้สิ่งที่คล้ายกับ "Python 2.6.6" และมีคำตอบของคุณเหมือนที่ Winston Ewert เขียนไว้

(คุณสามารถเพิ่ม interperter ใหม่ได้โดยคลิกปุ่ม "New ... " และกำหนด / usr / bin / python3 เป็น "location" จากนั้นคุณอาจต้องเปลี่ยนการตั้งค่าโปรเจ็กต์ของคุณ (ค่ากำหนด -> PyDev - Interpreter / Grammar)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.