2012-04-07 79 views
55

Possible Duplicate:
“ValueError: zero length field name in format” error in Python 3.0,3.1,3.2ValueError异常:在格式蟒蛇零长度字段名称

我花了几个小时试图解决这个问题,但都无济于事。我读了this guide。 我还没有找到任何示例如何做我需要的。

当我运行该脚本,我得到这个错误(部分省略):

Traceback (...): 
    [...] 
    output.write("{: > 026,.18e} {: > 026,.18e}\n".format(x,y)) 
ValueError: zero length field name in format. 

的代码是用Python编写2.6或2.7,但我运行python 3.1。我该如何改变输出格式才能使用?

def f(x,y,a = 0.01): 
    return y/(a+x)-y**3 

def ekspEuler(N,dat): 
    output = open(dat,"w") 
    h = 3.0/N 
    x,y = 0,1 #zac.pogoj 

    for i in range(1,N+2): 
     output.write("{: > 026,.18e} {: > 026,.18e}\n".format(x,y)) 
     y += h*f(x,y) 
     x = i*h 
    output.close() 

感谢您的帮助。

+0

那么,你想要*做*什么?或者以不同的方式问,为什么你不想''{} {}“。format(x,y)'? – phihag 2012-04-07 11:43:15

+0

我仍然得到相同的错误。 – malganis 2012-04-07 11:45:31

+0

问题是在一个括号中有两个说明符?我省略了.18e然后我得到OverflowError:(34,'数字结果我们的范围') – malganis 2012-04-07 12:14:28

回答

134

很可能你正在运行一个旧的Python版本,而不是3.1。在Python 2.6,则需要在格式规范指标,像这样:

"{0} {1}\n".format(x,y) 

更新您的Python版本最近的一个,最好是2.7或3.2,来解决这个问题。根据文件,忽略数字指数should work in Python 3.1

Changed in version 3.1: The positional argument specifiers can be omitted, so '{} {}' is equivalent to '{0} {1}'.

+0

我正在运行python 3.1.3,我正在使用Geanny。我不知道如何安装3.2版本。我是linux新手。 – malganis 2012-04-07 12:16:09

+0

对不起,我不知道* Geanny *是什么。你的意思是编辑[Geany](http://www.geany.org/)?无论如何,你可以用'import sys; print(sys.version)'来找出你的Python版本。有很多Linux发行版,您正在使用哪一种? – phihag 2012-04-07 12:57:49

+0

这是Geany。我使用的是Ubuntu 10.04。你是对的。我正在使用2.6.5。我试着用这个:output.write(“{0:> 026,.18e} {1:> 026,.18e} \ n”.format(x,y))我得到ValueError:无效的转换规范 – malganis 2012-04-07 13:09:03