Python 3.0、3.1、3.2中的“ ValueError:格式为零长度的字段名称”错误


120

我正在尝试学习Python(具体来说是3),并且遇到了以下错误:

ValueError: zero length field name in format

我用谷歌搜索,发现需要指定数字:

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,只是我用Python编写的第二个“脚本”。


1
尝试添加以下内容:import sys; print(sys.version),只是为了确保您不会意外调用其他版本的python
Winston Ewert

Answers:


131

我会猜测您偶然以某种方式运行了python 2.6。

如果您使用的是python 3,则此功能至少适用于3.1;如果您使用的是python 2,则此功能仅适用于2.7。


3
谢谢!就是这样!不得不将我的shebangs更改为:#! /usr/local/bin/python3环顾四周。在Mac -_- wtf上有3个不同的python安装位置。
奥斯卡·戈德森

4
这在某种程度上是正确的:如果是python 2.7,但不是2.6,OP的代码将起作用。(请参阅@Dennis Williamson的答案)。
mayhewsw 2014年

我在Windows上使用Python 3.0.1遇到了这个问题。(启动Python cmdline后第一行肯定说3.0.1)
inger

@inger,您需要python 3.1才能使用它。
温斯顿·埃韦特

嗯,感谢您的快速答复。.但是,下面的答案是“ 2.7及更高版本”-那么3.0.1较早吗?另外,OP询问了3.0(及其他版本)中的问题-您的回答是“您正在运行2.6”,这表明3.0本身还可以。如果您可以更新答案,那就太好了。谢谢
歌手2015年

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
今天的版本差异使我烦恼!谢谢你的指点。
理查德·克莱顿

@Dennis:我对您的答案投了赞成票,因为您展示了如何通过指定字段编号来解决早期python版本中的问题。但是,说“ Python 2.7及更高版本”似乎误导了我,因为根据此处的其他答案,Python 3.0中需要字段编号。温斯顿在对他的答案的最后评论中指出2.7在3.0之后出现,因此您的陈述在时间顺序上可能是正确的,但是我们大多数人都认为这表明空括号应该在3.0中起作用。
汤姆·巴伦

@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 whill会给您类似“ Python 2.6.6”的信息。就像Winston Ewert所写的那样,您的答案是正确的。

(您可以通过单击“新建...”按钮并在/ usr / bin / python3中将其添加为“位置”来添加新的交互程序。然后,您可能必须更改项目设置(首选项-> PyDev-解释器/语法)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.