@@ -105,28 +105,21 @@ def showsyntaxerror(self, filename=None):
105
105
The output is written by self.write(), below.
106
106
107
107
"""
108
- type , value , tb = sys .exc_info ()
109
- sys .last_type = type
110
- sys .last_value = value
111
- sys .last_traceback = tb
112
- if filename and type is SyntaxError :
113
- # Work hard to stuff the correct filename in the exception
114
- try :
115
- msg , (dummy_filename , lineno , offset , line ) = value .args
116
- except ValueError :
117
- # Not the format we expect; leave it alone
118
- pass
119
- else :
120
- # Stuff in the right filename
121
- value = SyntaxError (msg , (filename , lineno , offset , line ))
122
- sys .last_value = value
123
- if sys .excepthook is sys .__excepthook__ :
124
- lines = traceback .format_exception_only (type , value )
125
- self .write ('' .join (lines ))
126
- else :
127
- # If someone has set sys.excepthook, we let that take precedence
128
- # over self.write
129
- sys .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
130
123
131
124
def showtraceback (self ):
132
125
"""Display the exception that just occurred.
@@ -136,18 +129,39 @@ def showtraceback(sel
D7AE
f):
136
129
The output is written by self.write(), below.
137
130
138
131
"""
139
- sys .last_type , sys .last_value , last_tb = ei = sys .exc_info ()
140
- sys .last_traceback = last_tb
141
132
try :
142
- lines = traceback .format_exception (ei [0 ], ei [1 ], last_tb .tb_next )
143
- if sys .excepthook is sys .__excepthook__ :
144
- self .write ('' .join (lines ))
145
- else :
146
- # If someone has set sys.excepthook, we let that take precedence
147
- # over self.write
148
- sys .excepthook (ei [0 ], ei [1 ], last_tb )
133
+ typ , value , tb = sys .exc_info ()
134
+ self ._showtraceback (typ , value , tb .tb_next )
149
135
finally :
150
- last_tb = ei = None
136
+ typ = value = tb = None
137
+
138
+ def _showtraceback (self , typ , value , tb , colorize = False , limit = None ):
139
+ # This method is being overwritten in
140
+ # _pyrepl.console.InteractiveColoredConsole to pass different values of
141
+ # colorize and limit
142
+ sys .last_type = typ
143
+ sys .last_traceback = tb
144
+ sys .last_exc = sys .last_value = value = value .with_traceback (tb )
145
+ if sys .excepthook is sys .__excepthook__ :
146
+ lines = traceback .format_exception (typ , value , tb ,
147
+ colorize = colorize ,
148
+ limit = limit )
149
+ self .write ('' .join (lines ))
150
+ else :
151
+ # If someone has set sys.excepthook, we let that take precedence
152
+ # over self.write
153
+ try :
154
+ sys .excepthook (typ , value , tb )
155
+ except SystemExit :
156
+ raise
157
+ except BaseException as e :
158
+ e .__context__ = None
159
+ e = e .with_traceback (e .__traceback__ .tb_next )
160
+ print ('Error in sys.excepthook:' , file = sys .stderr )
161
+ sys .__excepthook__ (type (e ), e , e .__traceback__ )
162
+ print (file = sys .stderr )
163
+ print ('Original exception was:' , file = sys .stderr )
164
+ sys .__excepthook__ (typ , value , tb )
151
165
152
166
def write (self , data ):
153
167
"""Write a string.
0 commit comments