Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ce4ba89

Browse files
committed
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.
1 parent 71de6c6 commit ce4ba89

1 file changed

Lines changed: 14 additions & 1 deletion

File tree

Lib/StringIO.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,12 @@ def close(self):
4141
self.closed = 1
4242
del self.buf, self.pos
4343
def isatty(self):
44+
if self.closed:
45+
raise ValueError, "I/O operation on closed file"
4446
return 0
4547
def seek(self, pos, mode = 0):
48+
if self.closed:
49+
raise ValueError, "I/O operation on closed file"
4650
if self.buflist:
4751
self.buf = self.buf + string.joinfields(self.buflist, '')
4852
self.buflist = []
@@ -52,8 +56,12 @@ def seek(self, pos, mode = 0):
5256
pos = pos + self.len
5357
self.pos = max(0, pos)
5458
def tell(self):
59+
if self.closed:
60+
raise ValueError, "I/O operation on closed file"
5561
return self.pos
5662
def read(self, n = -1):
63+
if self.closed:
64+
raise ValueError, "I/O operation on closed file"
5765
if self.buflist:
5866
self.buf = self.buf + string.joinfields(self.buflist, '')
5967
self.buflist = []
@@ -65,6 +73,8 @@ def read(self, n = -1):
6573
self.pos = newpos
6674
return r
6775
def readline(self, length=None):
76+
if self.closed:
77+
raise ValueError, "I/O operation on closed file"
6878
if self.buflist:
6979
self.buf = self.buf + string.joinfields(self.buflist, '')
7080
self.buflist = []
@@ -87,6 +97,8 @@ def readlines(self):
8797
line = self.readline()
8898
return lines
8999
def write(self, s):
100+
if self.closed:
101+
raise ValueError, "I/O operation on closed file"
90102
if not s: return
91103
if self.pos > self.len:
92104
self.buflist.append('\0'*(self.pos - self.len))
@@ -105,7 +117,8 @@ def write(self, s):
105117
def writelines(self, list):
106118
self.write(string.joinfields(list, ''))
107119
def flush(self):
108-
pass
120+
if self.closed:
121+
raise ValueError, "I/O operation on closed file"
109122
def getvalue(self):
110123
if self.buflist:
111124
self.buf = self.buf + string.joinfields(self.buflist, '')

0 commit comments

Comments
 (0)