2010-04-27 8 views
5

Mój interpretera Pythona (v2.6.5) podnosi powyższy błąd w następującym codepart:fd.seek() IOError: [ERRNO 22] Invalid argument

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

ostatniej rozmowy jest 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 

Dziwne jest to, że wyjątek pojawia się właśnie podczas wykonywania całego mojego kodu, a nie tylko konkretnej części z otwieraniem pliku. W środowisku wykonawczym tej części kodu zdecydowanie istnieje otwarty plik, dysk nie jest pełny, zmienna "iterator" zawiera poprawną wartość, jak w pierwszym bloku kodu. Co może być mój błąd?

góry dzięki

+1

Czy to możliwe, że plik jest pusty? Żeby nie mógł wrócić do -2? – mathmike

+0

po prostu dwukrotnie to sprawdził, plik istnieje za każdym razem, przed otwartym końcem przed szukaniem. – Julian

+0

plik istnieje I ma coś w nim? Plik może istnieć, ale nadal być pusty. – mathmike

Odpowiedz

4

Od 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.

więc dokładnie sprawdzić wartość iterator.

+0

to zdecydowanie -2 w pierwszym cyklu pętli, który jest także punktem, w którym się zawiesza ... – Julian

+0

"lub wynikowe przesunięcie pliku byłoby ujemne". Jaki jest rozmiar pliku? – wRAR

+0

masz to ... to było ZERO chociaż zastanawiam się, dlaczego, czy muszę .close() plik najpierw przed następnym czytałem? – Julian

Powiązane problemy