[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)