@@ -334,8 +334,7 @@ def test_capi1():
334334 try :
335335 _testcapi .raise_exception (BadException , 1 )
336336 except TypeError as err :
337- exc , err , tb = sys .exc_info ()
338- co = tb .tb_frame .f_code
337+ co = err .__traceback__ .tb_frame .f_code
339338 self .assertEqual (co .co_name , "test_capi1" )
340339 self .assertTrue (co .co_filename .endswith ('test_exceptions.py' ))
341340 else :
@@ -346,8 +345,7 @@ def test_capi2():
346345 try :
347346 _testcapi .raise_exception (BadException , 0 )
348347 except RuntimeError as err :
349- exc , err , tb = sys .exc_info ()
350- tb = tb .tb_next
348+ tb = err .__traceback__ .tb_next
351349 co = tb .tb_frame .f_code
352350 self .assertEqual (co .co_name , "__init__" )
353351 self .assertTrue (co .co_filename .endswith ('test_exceptions.py' ))
@@ -888,28 +886,28 @@ def yield_raise():
888886 try :
889887 raise KeyError ("caught" )
890888 except KeyError :
891- yield sys .exc_info ()[ 0 ]
892- yield sys .exc_info ()[ 0 ]
893- yield sys .exc_info ()[ 0 ]
889+ yield sys .exception ()
890+ yield sys .exception ()
891+ yield sys .exception ()
894892 g = yield_raise ()
895- self .assertEqual (next (g ), KeyError )
896- self .assertEqual (sys .exc_info ()[ 0 ], None )
897- self .assertEqual (next (g ), KeyError )
898- self .assertEqual (sys .exc_info ()[ 0 ], None )
899- self .assertEqual (next (g ), None )
893+ self .assertIsInstance (next (g ), KeyError )
894+ self .assertIsNone (sys .exception () )
895+ self .assertIsInstance (next (g ), KeyError )
896+ self .assertIsNone (sys .exception () )
897+ self .assertIsNone (next (g ))
900898
901899 # Same test, but inside an exception handler
902900 try :
903901 raise TypeError ("foo" )
904902 except TypeError :
905903 g = yield_raise ()
906- self .assertEqual (next (g ), KeyError )
907- self .assertEqual (sys .exc_info ()[ 0 ] , TypeError )
908- self .assertEqual (next (g ), KeyError )
909- self .assertEqual (sys .exc_info ()[ 0 ] , TypeError )
910- self .assertEqual (next (g ), TypeError )
904+ self .assertIsInstance (next (g ), KeyError )
905+ self .assertIsInstance (sys .exception () , TypeError )
906+ self .assertIsInstance (next (g ), KeyError )
907+ self .assertIsInstance (sys .exception () , TypeError )
908+ self .assertIsInstance (next (g ), TypeError )
911909 del g
912- self .assertEqual (sys .exc_info ()[ 0 ] , TypeError )
910+ self .assertIsInstance (sys .exception () , TypeError )
913911
914912 def test_generator_leaking2 (self ):
915913 # See issue 12475.
@@ -924,7 +922,7 @@ def g():
924922 next (it )
925923 except StopIteration :
926924 pass
927- self .assertEqual (sys .exc_info (), ( None , None , None ))
925+ self .assertIsNone (sys .exception ( ))
928926
929927 def test_generator_leaking3 (self ):
930928 # See issue #23353. When gen.throw() is called, the caller's
@@ -933,17 +931,17 @@ def g():
933931 try :
934932 yield
935933 except ZeroDivisionError :
936- yield sys .exc_info ()[ 1 ]
934+ yield sys .exception ()
937935 it = g ()
938936 next (it )
939937 try :
940938 1 / 0
941939 except ZeroDivisionError as e :
942- self .assertIs (sys .exc_info ()[ 1 ] , e )
940+ self .assertIs (sys .exception () , e )
943941 gen_exc = it .throw (e )
944- self .assertIs (sys .exc_info ()[ 1 ] , e )
942+ self .assertIs (sys .exception () , e )
945943 self .assertIs (gen_exc , e )
946- self .assertEqual (sys .exc_info (), ( None , None , None ))
944+ self .assertIsNone (sys .exception ( ))
947945
948946 def test_generator_leaking4 (self ):
949947 # See issue #23353. When an exception is raised by a generator,
@@ -952,39 +950,39 @@ def g():
952950 try :
953951 1 / 0
954952 except ZeroDivisionError :
955- yield sys .exc_info ()[ 0 ]
953+ yield sys .exception ()
956954 raise
957955 it = g ()
958956 try :
959957 raise TypeError
960958 except TypeError :
961959 # The caller's exception state (TypeError) is temporarily
962960 # saved in the generator.
963- tp = next (it )
961+ tp = type ( next (it ) )
964962 self .assertIs (tp , ZeroDivisionError )
965963 try :
966964 next (it )
967965 # We can't check it immediately, but while next() returns
968966 # with an exception, it shouldn't have restored the old
969967 # exception state (TypeError).
970968 except ZeroDivisionError as e :
971- self .assertIs (sys .exc_info ()[ 1 ] , e )
969+ self .assertIs (sys .exception () , e )
972970 # We used to find TypeError here.
973- self .assertEqual (sys .exc_info (), ( None , None , None ))
971+ self .assertIsNone (sys .exception ( ))
974972
975973 def test_generator_doesnt_retain_old_exc (self ):
976974 def g ():
977- self .assertIsInstance (sys .exc_info ()[ 1 ] , RuntimeError )
975+ self .assertIsInstance (sys .exception () , RuntimeError )
978976 yield
979- self .assertEqual (sys .exc_info (), ( None , None , None ))
977+ self .assertIsNone (sys .exception ( ))
980978 it = g ()
981979 try :
982980 raise RuntimeError
983981 except RuntimeError :
984982 next (it )
985983 self .assertRaises (StopIteration , next , it )
986984
987- def test_generator_finalizing_and_exc_info (self ):
985+ def test_generator_finalizing_and_sys_exception (self ):
988986 # See #7173
989987 def simple_gen ():
990988 yield 1
@@ -996,7 +994,7 @@ def run_gen():
996994 return next (gen )
997995 run_gen ()
998996 gc_collect ()
999- self .assertEqual (sys .exc_info (), ( None , None , None ))
997+ self .assertIsNone (sys .exception ( ))
1000998
1001999 def _check_generator_cleanup_exc_state (self , testfunc ):
10021000 # Issue #12791: exception state is cleaned up as soon as a generator
@@ -1067,14 +1065,14 @@ def test_3114(self):
10671065 class MyObject :
10681066 def __del__ (self ):
10691067 nonlocal e
1070- e = sys .exc_info ()
1068+ e = sys .exception ()
10711069 e = ()
10721070 try :
10731071 raise Exception (MyObject ())
10741072 except :
10751073 pass
10761074 gc_collect () # For PyPy or other GCs.
1077- self .assertEqual ( e , ( None , None , None ) )
1075+ self .assertIsNone ( e )
10781076
10791077 def test_raise_does_not_create_context_chain_cycle (self ):
10801078 class A (Exception ):
@@ -1692,7 +1690,7 @@ def g():
16921690 raise ValueError
16931691 except ValueError :
16941692 yield 1
1695- self .assertEqual (sys .exc_info (), ( None , None , None ))
1693+ self .assertIsNone (sys .exception ( ))
16961694 yield 2
16971695
16981696 gen = g ()
0 commit comments