Kesalahan “ValueError: nama bidang dengan panjang nol dalam format” di Python 3.0,3.1,3.2

120

Saya mencoba belajar Python (3 untuk lebih spesifik) dan saya mendapatkan kesalahan ini:

ValueError: zero length field name in format

Saya mencarinya di Google dan menemukan Anda perlu menentukan angkanya:

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))

Dan tidak seperti tutorial (dari lynda.com) yang sebenarnya mengatakan:

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))

Tutorial yang saya ikuti memiliki Python 3.1, dan saya menggunakan 3.2 dan apa yang saya baca tentang kesalahan ini adalah bahwa ini hanya terjadi di <3.1 (3.0). Apakah mereka membatalkan ini di 3.2, atau apakah saya melakukan sesuatu yang salah?

Juga, berbicara perlahan;) ini secara harfiah adalah malam pertama saya belajar Python dan hanya "skrip" kedua yang saya tulis dengan Python.

Oscar Godson
sumber
1
Coba tambahkan ini: import sys; print (sys.version), hanya untuk memastikan bahwa Anda tidak secara tidak sengaja memanggil versi lain dari python
Winston Ewert

Jawaban:

131

Saya akan menebak bahwa Anda menjalankan python 2.6 secara tidak sengaja.

Fitur ini hanya tersedia setidaknya 3.1 jika Anda menggunakan python 3, atau 2.7 jika Anda menggunakan python 2.

Winston Ewert
sumber
3
Terima kasih! itu dia! Harus mengubah shebangs saya menjadi: #! /usr/local/bin/python3setelah melihat-lihat. Ada 3 lokasi berbeda untuk menginstal python di Mac -_- wtf.
Oscar Godson
4
Ini sebagian benar: kode OP akan berfungsi jika itu adalah python 2.7, tetapi bukan 2.6. (Lihat jawaban @Dennis Williamson).
mayhewsw
Saya mendapatkan masalah ini dengan Python 3.0.1 di Windows. (Ini jelas mengatakan 3.0.1 di baris pertama setelah memulai Python cmdline)
inger
@inger, Anda memerlukan python 3.1 untuk menggunakannya.
Winston Ewert
hmm, terima kasih atas balasan cepatnya .. namun, jawaban di bawah mengatakan "2.7 dan yang lebih baru" - jadi 3.0.1 lebih awal? Juga, OP bertanya tentang masalah di 3.0 (+ lainnya) - yang jawaban Anda adalah "Anda menjalankan 2.6", yang akan menyarankan 3.0 itu sendiri ok. Alangkah baiknya jika Anda dapat memperbarui jawabannya. Terima kasih
inger
148

Python 2.6 dan 3.0 membutuhkan nomor field. Di Python 2.7 dan yang lebih baru dan 3.1 dan yang lebih baru, mereka dapat dihilangkan.

Berubah pada versi 2.7: Penentu argumen posisi bisa dihilangkan, jadi '{} {}' sama dengan '{0} {1}'.

python2.6.4>>> print '|{0:^12}|{1:^12}|'.format(3,4)
|     3      |     4     |
Dijeda sampai pemberitahuan lebih lanjut.
sumber
2
Perbedaan versi membuat saya bersemangat hari ini! Terima kasih atas penunjuknya.
Richard Clayton
@ Dennis: Saya memilih jawaban Anda karena Anda menunjukkan cara mengatasi masalah di versi python sebelumnya, dengan menentukan nomor bidang. Namun, mengatakan "Python 2.7 dan yang lebih baru" tampaknya menyesatkan bagi saya karena menurut jawaban lain di sini, nomor bidang diperlukan dalam Python 3.0. Winston menunjukkan dalam komentar terakhir pada jawabannya bahwa 2.7 keluar setelah 3.0, jadi pernyataan Anda mungkin benar secara kronologis, tetapi kebanyakan dari kita akan membacanya sebagai indikasi bahwa kurung kurawal harus berfungsi di 3.0.
Tom Barron
@ TomBarron: Kawat gigi kosong cocok untuk saya:, python3.4 -c 'print("|{}|{}|".format(3,4))'tetapi tampaknya 3.0 tidak memilikinya (3.1 dan yang lebih baru memilikinya). Saya akan menjelaskan jawaban saya.
Dijeda sampai pemberitahuan lebih lanjut.
2

Jika Anda menggunakan Eclipse, Anda harus melihat ke Window -> Preferences -> PyDev -> Interpreter - Python. Di sana Anda memiliki daftar juru bahasa (dengan nama dan lokasi). Jika untuk proyek Anda saat ini, Anda menggunakan interpreter yang terletak misalnya di / usr / bin / python maka mungkin menjalankan / usr / bin / python -V akan memberi Anda sesuatu seperti "Python 2.6.6". Dan ada jawaban Anda seperti yang ditulis oleh Winston Ewert.

(Anda dapat menambahkan interperter baru hanya dengan mengklik tombol "Baru ..." dan memberikan / usr / bin / python3 sebagai "lokasi". Kemudian Anda mungkin harus mengubah pengaturan proyek Anda (Preferensi -> PyDev - Interpreter / Tata Bahasa).

ilektrik
sumber