Подтвердить что ты не робот

ValueError: имя поля нулевой длины в формате python

Возможный дубликат:
"Ошибка ValueError: имя нулевой длины в формате" в Python 3.0,3.1,3.2

Я потратил часы, пытаясь решить эту проблему, но безрезультатно. Я прочитал это руководство. Я не нашел примеров, как делать то, что мне нужно.

Когда я запускаю script, я получаю эту ошибку (частично опущен):

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

Спасибо за вашу помощь.

4b9b3361

Ответ 1

Скорее всего, вы используете старую версию Python, а не 3.1. В Python 2.6 вам нужны индексы в спецификациях формата, например:

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

Обновите версию Python до последней версии, предпочтительно 2.7 или 3.2, чтобы устранить проблему. В соответствии с документацией, оставляя числовые индексы должны работать в Python 3.1:

Изменено в версии 3.1: Спецификаторы позиционного аргумента могут быть опущены, поэтому '{} {}' эквивалентно '{0} {1}'.