Python 3.0,3.1,3.2'de "ValueError: formatta sıfır uzunluklu alan adı" hatası


120

Python öğrenmeye çalışıyorum (daha spesifik olmak gerekirse 3) ve şu hatayı alıyorum:

ValueError: zero length field name in format

Google'da araştırdım ve sayıları belirtmeniz gerektiğini öğrendim:

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

Ve öğretici gibi değil (lynda.com'dan) aslında şunu söylüyor:

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

Aşağıdaki öğreticide Python 3.1 var ve 3.2 kullanıyorum ve bu hata hakkında okuduğum şey, bunun yalnızca <3.1 (3.0) 'da olduğu. Bunu 3.2'de geri mi aldılar yoksa yanlış bir şey mi yapıyorum?

Ayrıca, yavaş konuşun;) bu tam anlamıyla ilk gecem Python öğreniyorum ve sadece Python'da yazdığım 2. "script".


1
Bunu eklemeyi deneyin: import sys; print (sys.version), sadece yanlışlıkla başka bir python sürümünü çağırmadığınızdan emin olmak için
Winston Ewert

Yanıtlar:


131

Python 2.6'yı bir şekilde kazara çalıştırdığınızı tahmin edeceğim.

Bu özellik yalnızca python 3 kullanıyorsanız en az 3.1 veya python 2 kullanıyorsanız 2.7 için kullanılabilir.


3
Teşekkürler! işte bu! Meselelerimi şu şekilde değiştirmem gerekiyordu: #! /usr/local/bin/python3her yere baktıktan sonra. Mac -_- wtf'de python kurulumlarının 3 farklı konumu vardır.
Oscar Godson

4
Bu kısmen doğrudur: OP'nin kodu python 2.7 olsaydı çalışırdı, 2.6 değil. (@Dennis Williamson'ın cevabına bakınız).
mayhewsw

Windows'ta Python 3.0.1 ile bu sorunu alıyorum. (Python
cmdline'ı

@inger, kullanmak için python 3.1'e ihtiyacınız var.
Winston Ewert

hmm, hızlı yanıt için teşekkürler .. ancak, aşağıdaki yanıtlar "2.7 ve sonrası" diyor - yani 3.0.1 daha önceydi? Ayrıca OP 3.0'daki (+ diğerleri) sorunu sordu - cevabınız "2.6 kullanıyorsunuz", bu da 3.0'ın kendisinin uygun olduğunu gösteriyor. Cevabı güncellemeniz iyi olur. Teşekkür
inger

148

Python 2.6 ve 3.0, alan numaralarını gerektirir. Python 2.7 ve sonrasında ve 3.1 ve sonrasında çıkarılabilirler.

2.7 sürümünde değiştirildi: Konumsal bağımsız değişken belirleyicileri atlanabilir, bu nedenle '{} {}', '{0} {1}' ile eşdeğerdir.

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

2
Sürüm farkı bugün beni güçlendirdi! İşaretçi için teşekkürler.
Richard Clayton

@Dennis: Sorunu Python'un önceki sürümlerinde alan numarasını belirterek nasıl çözeceğinizi gösterdiğiniz için cevabınıza oy verdim. Ancak, "Python 2.7 ve sonrası" demek bana yanıltıcı geliyor çünkü buradaki diğer cevaplara göre Python 3.0'da alan numaraları gerekiyor. Winston, cevabıyla ilgili son yorumda 2.7'nin 3.0'dan sonra çıktığına dikkat çekiyor, bu nedenle ifadeniz kronolojik olarak doğru olabilir, ancak çoğumuz bunu boş parantezlerin 3.0'da çalışması gerektiğini belirtir olarak okuruz.
Tom Barron

@TomBarron: Boş parantezler benim için çalışıyor: python3.4 -c 'print("|{}|{}|".format(3,4))'ama görünüşe göre 3.0'da yok (3.1 ve sonrası var). Cevabımı açıklığa kavuşturacağım.
sonraki duyuruya kadar duraklatıldı.

2

Eclipse kullanıyorsanız, Pencere -> Tercihler -> PyDev -> Yorumlayıcı - Python'a bakmalısınız. Orada bir tercüman listesi var (adı ve yeri ile birlikte). Mevcut projeniz için, örneğin / usr / bin / python'da bulunan bir yorumlayıcı kullanıyorsanız, muhtemelen / usr / bin / python -V'yi çalıştırarak size "Python 2.6.6" gibi bir şey verecektir. Ve Winston Ewert'in yazdığı gibi cevabınız var.

("Yeni ..." düğmesini tıklayarak ve / usr / bin / python3'ü "konum" olarak vererek yeni yorumlayıcı ekleyebilirsiniz. O zaman muhtemelen proje ayarlarınızı değiştirmeniz gerekir (Tercihler -> PyDev - Yorumlayıcı / Dilbilgisi).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.