diff -r c5fbacf79b1e Lib/tempfile.py --- a/Lib/tempfile.py Sat Jan 30 12:34:12 2016 +0200 +++ b/Lib/tempfile.py Sat Feb 20 15:22:05 2016 +0100 @@ -552,7 +552,8 @@ newline=newline, encoding=encoding) return _TemporaryFileWrapper(file, name, delete) - except Exception: + except BaseException: + _os.unlink(name) _os.close(fd) raise diff -r c5fbacf79b1e Lib/test/test_tempfile.py --- a/Lib/test/test_tempfile.py Sat Jan 30 12:34:12 2016 +0200 +++ b/Lib/test/test_tempfile.py Sat Feb 20 15:22:05 2016 +0100 @@ -948,9 +948,17 @@ self.assertRaises(ValueError, tempfile.NamedTemporaryFile) self.assertEqual(len(closed), 1) + def test_bad_mode(self): + dir = tempfile.mkdtemp() + self.addCleanup(support.rmtree, dir) + with self.assertRaises(ValueError): + tempfile.NamedTemporaryFile(mode='wr', dir=dir) + with self.assertRaises(TypeError): + tempfile.NamedTemporaryFile(mode=2, dir=dir) + self.assertEqual(os.listdir(dir), []) + # How to test the mode and bufsize parameters? - class TestSpooledTemporaryFile(BaseTestCase): """Test SpooledTemporaryFile()."""