@@ -249,94 +249,31 @@ def print_exception():
249249 sys .last_type , sys .last_value , sys .last_traceback = excinfo
250250 sys .last_exc = val
251251 seen = set ()
252- exclude = ("run.py" , "rpc.py" , "threading.py" , "queue.py" ,
253- "debugger_r.py" , "bdb.py" )
254- max_group_width = 15
255- max_group_depth = 10
256- group_depth = 0
257-
258- def print_exc_group (typ , exc , tb , prefix = "" ):
259- nonlocal group_depth
260- group_depth += 1
261- prefix2 = prefix or " "
262- if group_depth > max_group_depth :
263- print (f"{ prefix2 } | ... (max_group_depth is { max_group_depth } )" ,
264- file = efile )
265- group_depth -= 1
266- return
267- if tb :
268- if not prefix :
269- print (" + Exception Group Traceback (most recent call last):" , file = efile )
270- else :
271- print (f"{ prefix } | Exception Group Traceback (most recent call last):" , file = efile )
272- tbe = traceback .extract_tb (tb )
273- cleanup_traceback (tbe , exclude )
274- for line in traceback .format_list (tbe ):
275- for subline in line .rstrip ().splitlines ():
276- print (f"{ prefix2 } | { subline } " , file = efile )
277- lines = get_message_lines (typ , exc , tb )
278- for line in lines :
279- print (f"{ prefix2 } | { line } " , end = "" , file = efile )
280- num_excs = len (exc .exceptions )
281- if num_excs <= max_group_width :
282- n = num_excs
283- else :
284- n = max_group_width + 1
285- for i , sub in enumerate (exc .exceptions [:n ], 1 ):
286- truncated = (i > max_group_width )
287- first_line_pre = "+-" if i == 1 else " "
288- title = str (i ) if not truncated else '...'
289- print (f"{ prefix2 } { first_line_pre } +---------------- { title } ----------------" , file = efile )
290- if truncated :
291- remaining = num_excs - max_group_width
292- plural = 's' if remaining > 1 else ''
293- print (f"{ prefix2 } | and { remaining } more exception{ plural } " ,
294- file = efile )
295- need_print_underline = True
296- elif id (sub ) not in seen :
297- if not prefix :
298- print_exc (type (sub ), sub , sub .__traceback__ , " " )
299- else :
300- print_exc (type (sub ), sub , sub .__traceback__ , prefix + " " )
301- need_print_underline = not isinstance (sub , BaseExceptionGroup )
302- else :
303- print (f"{ prefix2 } | <exception { type (sub ).__name__ } has printed>" , file = efile )
304- need_print_underline = True
305- if need_print_underline and i == n :
306- print (f"{ prefix2 } +------------------------------------" , file = efile )
307- group_depth -= 1
308252
309- def print_exc (typ , exc , tb , prefix = "" ):
253+ def print_exc (typ , exc , tb ):
310254 seen .add (id (exc ))
311255 context = exc .__context__
312256 cause = exc .__cause__
313- prefix2 = f"{ prefix } | " if prefix else ""
314257 if cause is not None and id (cause ) not in seen :
315- print_exc (type (cause ), cause , cause .__traceback__ , prefix )
316- print (f" { prefix2 } \n { prefix2 } The above exception was the direct cause "
317- f "of the following exception:\n { prefix2 } " , file = efile )
258+ print_exc (type (cause ), cause , cause .__traceback__ )
259+ print (" \n The above exception was the direct cause "
260+ "of the following exception:\n " , file = efile )
318261 elif (context is not None and
319262 not exc .__suppress_context__ and
320263 id (context ) not in seen ):
321- print_exc (type (context ), context , context .__traceback__ , prefix )
322- print (f"{ prefix2 } \n { prefix2 } During handling of the above exception, "
323- f"another exception occurred:\n { prefix2 } " , file = efile )
324- if isinstance (exc , BaseExceptionGroup ):
325- print_exc_group (typ , exc , tb , prefix = prefix )
326- else :
327- if tb :
328- print (f"{ prefix2 } Traceback (most recent call last):" , file = efile )
329- tbe = traceback .extract_tb (tb )
330- cleanup_traceback (tbe , exclude )
331- if prefix :
332- for line in traceback .format_list (tbe ):
333- for subline in line .rstrip ().splitlines ():
334- print (f"{ prefix } | { subline } " , file = efile )
335- else :
336- traceback .print_list (tbe , file = efile )
337- lines = get_message_lines (typ , exc , tb )
338- for line in lines :
339- print (f"{ prefix2 } { line } " , end = "" , file = efile )
264+ print_exc (type (context ), context , context .__traceback__ )
265+ print ("\n During handling of the above exception, "
266+ "another exception occurred:\n " , file = efile )
267+ if tb :
268+ tbe = traceback .extract_tb (tb )
269+ print ('Traceback (most recent call last):' , file = efile )
270+ exclude = ("run.py" , "rpc.py" , "threading.py" , "queue.py" ,
271+ "debugger_r.py" , "bdb.py" )
272+ cleanup_traceback (tbe , exclude )
273+ traceback .print_list (tbe , file = efile )
274+ lines = get_message_lines (typ , exc , tb )
275+ for line in lines :
276+ print (line , end = '' , file = efile )
340277
341278 print_exc (typ , val , tb )
342279
0 commit comments