web-dev-qa-db-fra.com

ValueError: nom du champ de longueur zéro au format python

Duplicate possible:
"ValueError: nom du champ de longueur zéro dans le format" error in Python 3.0,3.1,3.2

J'ai passé des heures à essayer de résoudre ce problème, mais en vain. Je lis ce guide . Je n'ai trouvé aucun exemple montrant comment faire ce dont j'ai besoin.

Lorsque je lance le script, j'obtiens cette erreur (en partie omise):

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

Le code est écrit en python 2.6 ou 2.7 mais je lance python 3.1. Comment aurais-je besoin de changer le format de sortie pour que cela fonctionne?

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

Merci de votre aide.

60
malganis

Il est fort probable que vous utilisiez une ancienne version Python, et non 3.1. Dans Python 2.6, vous avez besoin d'index dans les spécifications de format, comme ceci:

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

Mettez à jour votre version Python vers une version récente, de préférence 2.7 ou 3.2, pour résoudre le problème. Selon la documentation, laissez de côté les index numériques devrait fonctionner dans Python 3.1 :

Modifié dans la version 3.1: les spécificateurs d'argument de position peuvent être omis, ainsi '{} {}' est équivalent à '{0} {1}'.

147
phihag