@@ -105,29 +105,21 @@ def showsyntaxerror(self, filename=None):
105105 The output is written by self.write(), below.
106106
107107 """
108- type , value , tb = sys .exc_info ()
109- sys .last_exc = value
110- sys .last_type = type
111- sys .last_value = value
112- sys .last_traceback = tb
113- if filename and type is SyntaxError :
114- # Work hard to stuff the correct filename in the exception
115- try :
116- msg , (dummy_filename , lineno , offset , line ) = value .args
117- except ValueError :
118- # Not the format we expect; leave it alone
119- pass
120- else :
121- # Stuff in the right filename
122- value = SyntaxError (msg , (filename , lineno , offset , line ))
123- sys .last_exc = sys .last_value = value
124- if sys .excepthook is sys .__excepthook__ :
125- lines = traceback .format_exception_only (type , value )
126- self .write ('' .join (lines ))
127- else :
128- # If someone has set sys.excepthook, we let that take precedence
129- # over self.write
130- self ._call_excepthook (type , value , tb )
108+ try :
109+ typ , value , tb = sys .exc_info ()
110+ if filename and typ is SyntaxError :
111+ # Work hard to stuff the correct filename in the exception
112+ try :
113+ msg , (dummy_filename , lineno , offset , line ) = value .args
114+ except ValueError :
115+ # Not the format we expect; leave it alone
116+ pass
117+ else :
118+ # Stuff in the right filename
119+ value = SyntaxError (msg , (filename , lineno , offset , line ))
120+ self ._showtraceback (typ , value , None )
121+ finally :
122+ typ = value = tb = None
131123
132124 def showtraceback (self ):
133125 """Display the exception that just occurred.
@@ -137,32 +129,34 @@ def showtraceback(self):
137129 The output is written by self.write(), below.
138130
139131 """
140- sys .last_type , sys .last_value , last_tb = ei = sys .exc_info ()
141- sys .last_traceback = last_tb
142- sys .last_exc = ei [1 ]
143132 try :
144- if sys .excepthook is sys .__excepthook__ :
145- lines = traceback .format_exception (ei [0 ], ei [1 ], last_tb .tb_next )
146- self .write ('' .join (lines ))
147- else :
148- # If someone has set sys.excepthook, we let that take precedence
149- # over self.write
150- self ._call_excepthook (ei [0 ], ei [1 ], last_tb )
133+ typ , value , tb = sys .exc_info ()
134+ self ._showtraceback (typ , value , tb .tb_next )
151135 finally :
152- last_tb = ei = None
136+ typ = value = tb = None
153137
154- def _call_excepthook (self , typ , value , tb ):
155- try :
156- sys .excepthook (typ , value , tb )
157- except SystemExit :
158- raise
159- except BaseException as e :
160- e .__context__ = None
161- print ('Error in sys.excepthook:' , file = sys .stderr )
162- sys .__excepthook__ (type (e ), e , e .__traceback__ .tb_next )
163- print (file = sys .stderr )
164- print ('Original exception was:' , file = sys .stderr )
165- sys .__excepthook__ (typ , value , tb )
138+ def _showtraceback (self , typ , value , tb ):
139+ sys .last_type = typ
140+ sys .last_traceback = tb
141+ sys .last_exc = sys .last_value = value = value .with_traceback (tb )
142+ if sys .excepthook is sys .__excepthook__ :
143+ lines = traceback .format_exception (typ , value , tb )
144+ self .write ('' .join (lines ))
145+ else :
146+ # If someone has set sys.excepthook, we let that take precedence
147+ # over self.write
148+ try :
149+ sys .excepthook (typ , value , tb )
150+ except SystemExit :
151+ raise
152+ except BaseException as e :
153+ e .__context__ = None
154+ e = e .with_traceback (e .__traceback__ .tb_next )
155+ print ('Error in sys.excepthook:' , file = sys .stderr )
156+ sys .__excepthook__ (type (e ), e , e .__traceback__ )
157+ print (file = sys .stderr )
158+ print ('Original exception was:' , file = sys .stderr )
159+ sys .__excepthook__ (typ , value , tb )
166160
167161 def write (self , data ):
168162 """Write a string.
0 commit comments