2012-04-07 19 views
55

Possible Duplicate:
“ValueError: zero length field name in format” error in Python 3.0,3.1,3.2ValueError: longitud cero nombre de campo en formato pitón

he pasado horas tratando de resolver este problema, pero en vano. Leí this guide. No he encontrado ningún ejemplo de cómo hacer lo que necesito.

Cuando ejecuto el guión me sale este error (en parte omitida):

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

El código está escrito en Python 2.6 o 2.7, pero yo corro Python 3.1. ¿Cómo necesitaría cambiar el formato de salida para que funcione?

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

Gracias por su ayuda.

+0

Bueno, ¿qué quieres hacer *? O bien, pregunte de manera diferente, ¿por qué no quiere '' {} {} ". Format (x, y)'? – phihag

+0

Todavía recibo el mismo error. – malganis

+0

¿Existe el problema de que haya dos especificadores en un soporte? Omití .18e y luego recibí OverflowError: (34, 'Resultado numérico nuestro de rango') – malganis

Respuesta

134

Lo más probable es que esté ejecutando una versión antigua de Python, y no 3.1. En Python 2.6, necesita índices en las especificaciones de formato, como este:

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

actualización de la versión de Python a uno reciente, preferiblemente 2.7 o 3.2, para solucionar el problema. De acuerdo con la documentación, omitiendo los índices numéricos 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

Estoy ejecutando Python 3.1.3 y estoy usando Geanny. No sé cómo instalar la versión 3.2. Soy nuevo en Linux. – malganis

+0

Lo siento, no tengo idea de qué * Geanny * es. ¿Te refieres al editor [Geany] (http://www.geany.org/)? En cualquier caso, puede encontrar su versión de Python con 'import sys; print (sys.version)'. Hay muchas distribuciones de Linux, ¿cuál estás usando? – phihag

+0

Es Geany. Estoy usando Ubuntu 10.04. Usted tenía razón. Estoy usando 2.6.5. Intenté con esto: output.write ("{0:> 026, .18e} {1:> 026, .18e} \ n" .format (x, y)) Y obtengo ValueError: Especificación de conversión inválida – malganis

Cuestiones relacionadas