diff -r 96c0efe93774 Lib/test/test_wave.py --- a/Lib/test/test_wave.py Mon Apr 01 17:43:30 2013 -0400 +++ b/Lib/test/test_wave.py Tue Apr 02 12:10:40 2013 +0300 @@ -58,6 +58,23 @@ output = b'\0' * nframes * nchannels * sampwidth self.f.writeframes(output) + def test_context_manager(self): + self.f = wave.open(TESTFN, 'wb') + self.f.setnchannels(nchannels) + self.f.setsampwidth(sampwidth) + self.f.setframerate(framerate) + self.f.close() + + with wave.open(TESTFN) as f: + self.assertFalse(f.getfp().closed) + self.assertIs(f.getfp(), None) + + with open(TESTFN, 'wb') as testfile: + with self.assertRaises(wave.Error): + with wave.open(testfile, 'wb') as fout: + pass + self.assertEqual(testfile.closed, False) + def test_main(): run_unittest(TestWave) diff -r 96c0efe93774 Lib/wave.py --- a/Lib/wave.py Mon Apr 01 17:43:30 2013 -0400 +++ b/Lib/wave.py Tue Apr 02 12:10:40 2013 +0300 @@ -168,6 +168,13 @@ def __del__(self): self.close() + + def __enter__(self): + return self + + def __exit__(self, *args): + self.close() + # # User visible methods. # @@ -324,6 +331,12 @@ def __del__(self): self.close() + def __enter__(self): + return self + + def __exit__(self, *args): + self.close() + # # User visible methods. #