67

Possible Duplicate:
“ValueError: zero length field name in format” error in Python 3.0,3.1,3.2

I have spent hours trying to solve this problem but to no avail. I read this guide. I haven't found any examples how to do what I need.

When I run the script I get this error (partly omitted):

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

The code is written in python 2.6 or 2.7 but I run python 3.1. How would I need to change output format so that it would work?

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

Thanks for your help.

Community
  • 1
  • 1
malganis
  • 780
  • 1
  • 5
  • 8
  • Well, what do you want to *do*? Or asked differently, why don't you want `"{}{}".format(x,y)`? – phihag Apr 07 '12 at 11:43
  • Is the problem that there are two specifiers in one bracket? I omitted .18e and then I get OverflowError:(34, 'Numerical result our of range') – malganis Apr 07 '12 at 12:14

1 Answers1

161

Chances are that you're running an old Python version, and not 3.1. In Python 2.6, you need indices in the format specs, like this:

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

Update your Python version to a recent one, preferably 2.7 or 3.2, to fix the problem. According to the documentation, leaving out the numeric indices should work in Python 3.1:

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

phihag
  • 278,196
  • 72
  • 453
  • 469
  • I'm running python 3.1.3 and I'm using Geanny. I don't know how to install 3.2 version. I'm new to linux. – malganis Apr 07 '12 at 12:16
  • Sorry, I have no idea what *Geanny* is. Do you mean the editor [Geany](http://www.geany.org/)? In any case, you can find out your Python version with `import sys;print(sys.version)`. There are many Linux distributions, which one are you using? – phihag Apr 07 '12 at 12:57
  • It's Geany. I'm using Ubuntu 10.04. You were right. I'm using 2.6.5. I tried with this: output.write("{0: > 026,.18e} {1: > 026,.18e}\n".format(x,y)) And I get ValueError:Invalid conversion specification – malganis Apr 07 '12 at 13:09
  • In the current [Ubuntu 11.10, Python 2.7 is the default](http://packages.ubuntu.com/oneiric/python). So you can just update your Ubuntu installation - I wouldn't recommend an old one to a beginner anyways. Alternatively, [install a newer Python](http://stackoverflow.com/questions/5233536/python-2-7-on-ubuntu) on your system, or make your program run under Python3 by starting it with `#!/usr/bin/env python3.1`. – phihag Apr 07 '12 at 13:26
  • I had 11.10 but I didn't like it. I will move to linux mint next. Now it runs 3.1.2 and that error doesn't show up anymore. Thanks for your help. – malganis Apr 07 '12 at 13:58
  • This applies to python 6.6 in centos 6,x – Alec Istomin Aug 17 '17 at 00:39