diff -r d35fc6e58a70 Lib/tempfile.py --- a/Lib/tempfile.py Sun Dec 04 22:59:09 2016 +0100 +++ b/Lib/tempfile.py Tue Dec 06 21:25:09 2016 -0800 @@ -447,7 +447,10 @@ # Need to ensure the file is deleted on __del__ def __del__(self): - self.close() + if not self.close_called and self.file is not None: + _warnings.warn('unclosed file %r' % self, ResourceWarning, + stacklevel=2, source=self) + self.close() else: def close(self): diff -r d35fc6e58a70 Lib/test/test_tempfile.py --- a/Lib/test/test_tempfile.py Sun Dec 04 22:59:09 2016 +0100 +++ b/Lib/test/test_tempfile.py Tue Dec 06 21:25:09 2016 -0800 @@ -957,6 +957,14 @@ tempfile.NamedTemporaryFile(mode=2, dir=dir) self.assertEqual(os.listdir(dir), []) + def test_resource_warning_on_destructor(self): + file = tempfile.NamedTemporaryFile() + with warnings.catch_warnings(record=True) as w: + del file + self.assertEqual(len(w), 1) + self.assertEqual(w[-1].category, ResourceWarning) + self.assertIn('unclosed file', str(w[-1].message)) + # How to test the mode and bufsize parameters? class TestSpooledTemporaryFile(BaseTestCase):