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

Skip to content

Commit b86680e

Browse files
committed
Explicitly close some files (from issue #10093)
1 parent d9f5763 commit b86680e

6 files changed

Lines changed: 31 additions & 14 deletions

File tree

Lib/base64.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,8 @@ def main():
383383
if o == '-u': func = decode
384384
if o == '-t': test(); return
385385
if args and args[0] != '-':
386-
func(open(args[0], 'rb'), sys.stdout.buffer)
386+
with open(args[0], 'rb') as f:
387+
func(f, sys.stdout.buffer)
387388
else:
388389
func(sys.stdin.buffer, sys.stdout.buffer)
389390

Lib/mimetypes.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,8 @@ def read(self, filename, strict=True):
199199
list of standard types, else to the list of non-standard
200200
types.
201201
"""
202-
fp = open(filename)
203-
self.readfp(fp, strict)
204-
fp.close()
202+
with open(filename) as fp:
203+
self.readfp(fp, strict)
205204

206205
def readfp(self, fp, strict=True):
207206
"""
@@ -348,7 +347,7 @@ def init(files=None):
348347
files = knownfiles
349348
for file in files:
350349
if os.path.isfile(file):
351-
db.readfp(open(file))
350+
db.read(file)
352351
encodings_map = db.encodings_map
353352
suffix_map = db.suffix_map
354353
types_map = db.types_map[True]

Lib/sysconfig.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,8 @@ def _init_posix(vars):
333333
# load the installed pyconfig.h:
334334
config_h = get_config_h_filename()
335335
try:
336-
parse_config_h(open(config_h), vars)
336+
with open(config_h) as f:
337+
parse_config_h(f, vars)
337338
except IOError as e:
338339
msg = "invalid Python installation: unable to open %s" % config_h
339340
if hasattr(e, "strerror"):

Lib/test/test_argparse.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4160,7 +4160,8 @@ class TestEncoding(TestCase):
41604160
def _test_module_encoding(self, path):
41614161
path, _ = os.path.splitext(path)
41624162
path += ".py"
4163-
codecs.open(path, 'r', 'utf8').read()
4163+
with codecs.open(path, 'r', 'utf8') as f:
4164+
f.read()
41644165

41654166
def test_argparse_module_encoding(self):
41664167
self._test_module_encoding(argparse.__file__)

Lib/test/test_xml_etree.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -602,10 +602,13 @@ def parsefile():
602602
<ns0:empty-element />
603603
</ns0:root>
604604
605+
>>> with open(SIMPLE_XMLFILE) as f:
606+
... data = f.read()
607+
605608
>>> parser = ET.XMLParser()
606609
>>> parser.version # doctest: +ELLIPSIS
607610
'Expat ...'
608-
>>> parser.feed(open(SIMPLE_XMLFILE).read())
611+
>>> parser.feed(data)
609612
>>> print(serialize(parser.close()))
610613
<root>
611614
<element key="value">text</element>
@@ -614,7 +617,7 @@ def parsefile():
614617
</root>
615618
616619
>>> parser = ET.XMLTreeBuilder() # 1.2 compatibility
617-
>>> parser.feed(open(SIMPLE_XMLFILE).read())
620+
>>> parser.feed(data)
618621
>>> print(serialize(parser.close()))
619622
<root>
620623
<element key="value">text</element>
@@ -624,7 +627,7 @@ def parsefile():
624627
625628
>>> target = ET.TreeBuilder()
626629
>>> parser = ET.XMLParser(target=target)
627-
>>> parser.feed(open(SIMPLE_XMLFILE).read())
630+
>>> parser.feed(data)
628631
>>> print(serialize(parser.close()))
629632
<root>
630633
<element key="value">text</element>
@@ -727,7 +730,8 @@ def iterparse():
727730
end-ns None
728731
729732
>>> events = ("start", "end", "bogus")
730-
>>> context = iterparse(SIMPLE_XMLFILE, events)
733+
>>> with open(SIMPLE_XMLFILE, "rb") as f:
734+
... iterparse(f, events)
731735
Traceback (most recent call last):
732736
ValueError: unknown event 'bogus'
733737
@@ -779,6 +783,8 @@ def custom_builder():
779783
"""
780784
Test parser w. custom builder.
781785
786+
>>> with open(SIMPLE_XMLFILE) as f:
787+
... data = f.read()
782788
>>> class Builder:
783789
... def start(self, tag, attrib):
784790
... print("start", tag)
@@ -788,7 +794,7 @@ def custom_builder():
788794
... pass
789795
>>> builder = Builder()
790796
>>> parser = ET.XMLParser(target=builder)
791-
>>> parser.feed(open(SIMPLE_XMLFILE, "r").read())
797+
>>> parser.feed(data)
792798
start root
793799
start element
794800
end element
@@ -798,6 +804,8 @@ def custom_builder():
798804
end empty-element
799805
end root
800806
807+
>>> with open(SIMPLE_NS_XMLFILE) as f:
808+
... data = f.read()
801809
>>> class Builder:
802810
... def start(self, tag, attrib):
803811
... print("start", tag)
@@ -811,7 +819,7 @@ def custom_builder():
811819
... print("comment", repr(data))
812820
>>> builder = Builder()
813821
>>> parser = ET.XMLParser(target=builder)
814-
>>> parser.feed(open(SIMPLE_NS_XMLFILE, "r").read())
822+
>>> parser.feed(data)
815823
pi pi 'data'
816824
comment ' comment '
817825
start {namespace}root
@@ -829,7 +837,8 @@ def getchildren():
829837
"""
830838
Test Element.getchildren()
831839
832-
>>> tree = ET.parse(open(SIMPLE_XMLFILE, "rb"))
840+
>>> with open(SIMPLE_XMLFILE, "rb") as f:
841+
... tree = ET.parse(f)
833842
>>> for elem in tree.getroot().iter():
834843
... summarize_list(elem.getchildren())
835844
['element', 'element', 'empty-element']

Python/traceback.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent)
208208
PyObject *binary;
209209
PyObject *fob = NULL;
210210
PyObject *lineobj = NULL;
211+
PyObject *res;
211212
char buf[MAXPATHLEN+1];
212213
Py_UNICODE *u, *p;
213214
Py_ssize_t len;
@@ -253,6 +254,11 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent)
253254
break;
254255
}
255256
}
257+
res = PyObject_CallMethod(fob, "close", "");
258+
if (res)
259+
Py_DECREF(res);
260+
else
261+
PyErr_Clear();
256262
Py_DECREF(fob);
257263
if (!lineobj || !PyUnicode_Check(lineobj)) {
258264
Py_XDECREF(lineobj);

0 commit comments

Comments
 (0)