From ce4ba897be5e4fc116f7cf805f38dec48cd5cfea Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Tue, 18 Aug 1998 17:43:08 +0000 Subject: [PATCH] Raise the right exception (ValueError) for attempted I/O on closed StringIO objects; this makes the emulation of file objects a bit better, and the exceptions explain things a bit better. --- Lib/StringIO.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Lib/StringIO.py b/Lib/StringIO.py index dba38e42c0a..fc195b94af3 100644 --- a/Lib/StringIO.py +++ b/Lib/StringIO.py @@ -41,8 +41,12 @@ class StringIO: self.closed = 1 del self.buf, self.pos def isatty(self): + if self.closed: + raise ValueError, "I/O operation on closed file" return 0 def seek(self, pos, mode = 0): + if self.closed: + raise ValueError, "I/O operation on closed file" if self.buflist: self.buf = self.buf + string.joinfields(self.buflist, '') self.buflist = [] @@ -52,8 +56,12 @@ class StringIO: pos = pos + self.len self.pos = max(0, pos) def tell(self): + if self.closed: + raise ValueError, "I/O operation on closed file" return self.pos def read(self, n = -1): + if self.closed: + raise ValueError, "I/O operation on closed file" if self.buflist: self.buf = self.buf + string.joinfields(self.buflist, '') self.buflist = [] @@ -65,6 +73,8 @@ class StringIO: self.pos = newpos return r def readline(self, length=None): + if self.closed: + raise ValueError, "I/O operation on closed file" if self.buflist: self.buf = self.buf + string.joinfields(self.buflist, '') self.buflist = [] @@ -87,6 +97,8 @@ class StringIO: line = self.readline() return lines def write(self, s): + if self.closed: + raise ValueError, "I/O operation on closed file" if not s: return if self.pos > self.len: self.buflist.append('\0'*(self.pos - self.len)) @@ -105,7 +117,8 @@ class StringIO: def writelines(self, list): self.write(string.joinfields(list, '')) def flush(self): - pass + if self.closed: + raise ValueError, "I/O operation on closed file" def getvalue(self): if self.buflist: self.buf = self.buf + string.joinfields(self.buflist, '')