[Python-checkins] python/dist/src/Lib/test test_sys.py,1.4,1.5

gvanrossum@users.sourceforge.net gvanrossum@users.sourceforge.net
Fri, 28 Feb 2003 19:20:43 -0800


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv29053/Lib/test

Modified Files:
	test_sys.py 
Log Message:
- New function sys.exc_clear() clears the current exception.  This is
  rarely needed, but can sometimes be useful to release objects
  referenced by the traceback held in sys.exc_info()[2].  (SF patch
  #693195.)  Thanks to Kevin Jacobs!


Index: test_sys.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_sys.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** test_sys.py	19 Feb 2003 02:35:06 -0000	1.4
--- test_sys.py	1 Mar 2003 03:20:40 -0000	1.5
***************
*** 64,67 ****
--- 64,111 ----
      # Python/pythonrun.c::PyErr_PrintEx() is tricky.
  
+     def test_exc_clear(self):
+         self.assertRaises(TypeError, sys.exc_clear, 42)
+ 
+         # Verify that exc_info is present and matches exc, then clear it, and
+         # check that it worked.
+         def clear_check(exc):
+           typ, value, traceback = sys.exc_info()
+           self.assert_(typ is not None)
+           self.assert_(value is exc)
+           self.assert_(traceback is not None)
+ 
+           sys.exc_clear()
+ 
+           typ, value, traceback = sys.exc_info()
+           self.assert_(typ is None)
+           self.assert_(value is None)
+           self.assert_(traceback is None)
+ 
+         def clear():
+           try:
+             raise ValueError, 42
+           except ValueError, exc:
+             clear_check(exc)
+ 
+         # Raise an exception and check that it can be cleared
+         clear()
+ 
+         # Verify that a frame currently handling an exception is
+         # unaffected by calling exc_clear in a nested frame.
+         try:
+           raise ValueError, 13
+         except ValueError, exc:
+           typ1, value1, traceback1 = sys.exc_info()
+           clear()
+           typ2, value2, traceback2 = sys.exc_info()
+ 
+           self.assert_(typ1 is typ2)
+           self.assert_(value1 is exc)
+           self.assert_(value1 is value2)
+           self.assert_(traceback1 is traceback2)
+ 
+         # Check that an exception can be cleared outside of an except block
+         clear_check(exc)
+ 
      def test_exit(self):
          self.assertRaises(TypeError, sys.exit, 42, 42)