Issue #15068: Avoid creating a reference loop in fileinput.
This commit is contained in:
commit
aadaa3614e
|
@ -209,7 +209,6 @@ class FileInput:
|
|||
self._startlineno = 0
|
||||
self._filelineno = 0
|
||||
self._file = None
|
||||
self._readline = self._start_readline
|
||||
self._isstdin = False
|
||||
self._backupfilename = None
|
||||
# restrict mode argument to reading modes
|
||||
|
@ -247,15 +246,15 @@ class FileInput:
|
|||
return self
|
||||
|
||||
def __next__(self):
|
||||
line = self._readline()
|
||||
if line:
|
||||
self._filelineno += 1
|
||||
return line
|
||||
if not self._file:
|
||||
raise StopIteration
|
||||
self.nextfile()
|
||||
# Recursive call
|
||||
return self.__next__()
|
||||
while True:
|
||||
line = self._readline()
|
||||
if line:
|
||||
self._filelineno += 1
|
||||
return line
|
||||
if not self._file:
|
||||
raise StopIteration
|
||||
self.nextfile()
|
||||
# repeat with next file
|
||||
|
||||
def __getitem__(self, i):
|
||||
if i != self.lineno():
|
||||
|
@ -279,7 +278,10 @@ class FileInput:
|
|||
finally:
|
||||
file = self._file
|
||||
self._file = None
|
||||
self._readline = self._start_readline
|
||||
try:
|
||||
del self._readline # restore FileInput._readline
|
||||
except AttributeError:
|
||||
pass
|
||||
try:
|
||||
if file and not self._isstdin:
|
||||
file.close()
|
||||
|
@ -303,7 +305,7 @@ class FileInput:
|
|||
self.nextfile()
|
||||
# repeat with next file
|
||||
|
||||
def _start_readline(self):
|
||||
def _readline(self):
|
||||
if not self._files:
|
||||
if 'b' in self._mode:
|
||||
return b''
|
||||
|
@ -358,7 +360,7 @@ class FileInput:
|
|||
self._file = self._openhook(self._filename, self._mode)
|
||||
else:
|
||||
self._file = open(self._filename, self._mode)
|
||||
self._readline = self._file.readline
|
||||
self._readline = self._file.readline # hide FileInput._readline
|
||||
return self._readline()
|
||||
|
||||
def filename(self):
|
||||
|
|
Loading…
Reference in New Issue