fd.seek() IOError: [Errno 22] Invalid argument

7

我的Python解释器(v2.6.5)在以下代码段中引发了上述错误:

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

最后一次调用是 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

这件奇怪的事情在于,异常仅在执行整个代码时发生,而不是仅在打开文件的特定部分。 在这段代码运行时,已经打开的文件肯定存在,磁盘也没有满,变量“iterator”的值与第一个代码块中一样正确。 我的错误可能是什么呢? 提前感谢。

2
你的文件可能是空的吗?这样它就无法回溯到-2了吗? - mathmike
刚刚仔细检查了一下,文件在打开之前和寻找之前都存在。 - Julian
文件存在并且其中有内容吗?一个文件可以存在但仍然为空。 - mathmike
1个回答

8

来自lseek(2)

EINVAL

whence不是SEEK_SET、SEEK_CUR或SEEK_END之一;或者结果文件偏移量为负数,或超出可寻址设备的末尾。

因此,请仔细检查iterator的值。


在循环的第一次迭代中,它肯定是-2,这也是它崩溃的点... - Julian
1
“或者导致文件偏移量为负数。” 文件大小是多少? - wRAR
你懂的...它是零 虽然我想知道为什么,在下一次读取之前我必须先.close()一个文件吗? - Julian
1
在每个循环周期中关闭和重新打开文件是解决方案 :) 谢谢 - Julian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接