2010-04-27 23 views
5

Mi Python Interpreter (v2.6.5) eleva el error anterior en el siguiente codepart:fd.seek() IOError: [Errno 22] argumento no válido

fd = open("some_filename", "r") 
fd.seek(-2, os.SEEK_END) #same happens if you exchange the second arg. w/ 2 
data=fd.read(2); 

última llamada es fd.seek()

Traceback (most recent call last): 
    File "bot.py", line 250, in <module> 
     fd.seek(iterator, os.SEEK_END); 
IOError: [Errno 22] Invalid argument 

Lo extraño de esto es que la excepción ocurre cuando se ejecuta todo el código, no solo si se trata de la parte específica con la apertura del archivo. En el tiempo de ejecución de esta parte del código, el archivo abierto definitivamente existe, el disco no está lleno, la variable "iterador" contiene un valor correcto como en el primer bloque de código. ¿Cuál podría ser mi error?

Gracias de antemano

+1

¿es posible que el archivo esté vacío? ¿Así que no puede buscar todo el camino de regreso a -2? – mathmike

+0

simplemente lo comprobé dos veces, el archivo existe en ambas ocasiones, antes del extremo abierto antes de la búsqueda. – Julian

+0

el archivo existe Y tiene algo en él? Un archivo puede existir pero aún estar vacío. – mathmike

Respuesta

4

Desde lseek(2):

EINVAL

whence is not one of SEEK_SET, SEEK_CUR, SEEK_END; or the resulting file offset would be negative, or beyond the end of a seekable device.

Así que vuelva a comprobar el valor de iterator.

+0

es definitivamente -2 en el primer ciclo del ciclo, que es también el punto en el que se está bloqueando ... – Julian

+0

"o el desplazamiento del archivo resultante sería negativo". ¿Cuál es el tamaño del archivo? – wRAR

+0

lo tienes ... era CERO aunque me pregunto por qué, ¿tengo que cerrar() un archivo antes de la próxima lectura? – Julian

Cuestiones relacionadas