@@ -4637,6 +4637,49 @@ def foo():
4637
4637
f'{ boldm } ZeroDivisionError{ reset } : { magenta } division by zero{ reset } ' ]
4638
4638
self .assertEqual (actual , expected )
4639
4639
4640
+ def test_colorized_traceback_from_exception_group (self ):
4641
+ def foo ():
4642
+ exceptions = []
4643
+ try :
4644
+ 1 / 0
4645
+ except ZeroDivisionError as inner_exc :
4646
+ exceptions .append (inner_exc )
4647
+ raise ExceptionGroup ("test" , exceptions )
4648
+
4649
+ try :
4650
+ foo ()
4651
+ except Exception as e :
4652
+ exc = traceback .TracebackException .from_exception (
4653
+ e , capture_locals = True
4654
+ )
4655
+
4656
+ red = _colorize .ANSIColors .RED
4657
+ boldr = _colorize .ANSIColors .BOLD_RED
4658
+ magenta = _colorize .ANSIColors .MAGENTA
4659
+ boldm = _colorize .ANSIColors .BOLD_MAGENTA
4660
+ reset = _colorize .ANSIColors .RESET
4661
+ lno_foo = foo .__code__ .co_firstlineno
4662
+ actual = "" .join (exc .format (colorize = True )).splitlines ()
4663
+ expected = [f" + Exception Group Traceback (most recent call last):" ,
4664
+ f' | File { magenta } "{ __file__ } "{ reset } , line { magenta } { lno_foo + 9 } { reset } , in { magenta } test_colorized_traceback_from_exception_group{ reset } ' ,
4665
+ f' | { red } foo{ reset } { boldr } (){ reset } ' ,
4666
+ f' | { red } ~~~{ reset } { boldr } ^^{ reset } ' ,
4667
+ f" | e = ExceptionGroup('test', [ZeroDivisionError('division by zero')])" ,
4668
+ f" | foo = { foo } " ,
4669
+ f' | self = <{ __name__ } .TestColorizedTraceback testMethod=test_colorized_traceback_from_exception_group>' ,
4670
+ f' | File { magenta } "{ __file__ } "{ reset } , line { magenta } { lno_foo + 6 } { reset } , in { magenta } foo{ reset } ' ,
4671
+ f' | raise ExceptionGroup("test", exceptions)' ,
4672
+ f" | exceptions = [ZeroDivisionError('division by zero')]" ,
4673
+ f' | { boldm } ExceptionGroup{ reset } : { magenta } test (1 sub-exception){ reset } ' ,
4674
+ f' +-+---------------- 1 ----------------' ,
4675
+ f' | Traceback (most recent call last):' ,
4676
+ f' | File { magenta } "{ __file__ } "{ reset } , line { magenta } { lno_foo + 3 } { reset } , in { magenta } foo{ reset } ' ,
4677
+ f' | { red } 1 { reset } { boldr } /{ reset } { red } 0{ reset } ' ,
4678
+ f' | { red } ~~{ reset } { boldr } ^{ reset } { red } ~~{ reset } ' ,
4679
+ f" | exceptions = [ZeroDivisionError('division by zero')]" ,
4680
+ f' | { boldm } ZeroDivisionError{ reset } : { magenta } division by zero{ reset } ' ,
4681
+ f' +------------------------------------' ]
4682
+ self .assertEqual (actual , expected )
4640
4683
4641
4684
if __name__ == "__main__" :
4642
4685
unittest .main ()
0 commit comments