@@ -904,6 +904,129 @@ def test_post_mortem_chained():
904
904
"""
905
905
906
906
907
+ def test_post_mortem_cause_no_context ():
908
+ """Test post mortem traceback debugging of chained exception
909
+
910
+ >>> def main():
911
+ ... try:
912
+ ... raise ValueError('Context Not Shown')
913
+ ... except Exception as e1:
914
+ ... raise ValueError("With Cause") from TypeError('The Cause')
915
+
916
+ >>> def test_function():
917
+ ... import pdb;
918
+ ... instance = pdb.Pdb(nosigint=True, readrc=False)
919
+ ... try:
920
+ ... main()
921
+ ... except Exception as e:
922
+ ... # same as pdb.post_mortem(e), but with custom pdb instance.
923
+ ... instance.reset()
924
+ ... instance.interaction(None, e)
925
+
926
+ >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
927
+ ... 'exceptions',
928
+ ... 'exceptions 1',
929
+ ... 'up',
930
+ ... 'down',
931
+ ... 'exit',
932
+ ... ]):
933
+ ... try:
934
+ ... test_function()
935
+ ... except ValueError:
936
+ ... print('Ok.')
937
+ > <doctest test.test_pdb.test_post_mortem_cause_no_context[0]>(5)main()
938
+ -> raise ValueError("With Cause") from TypeError('The Cause')
939
+ (Pdb) exceptions
940
+ 0 TypeError('The Cause')
941
+ > 1 ValueError('With Cause')
942
+ (Pdb) exceptions 1
943
+ > <doctest test.test_pdb.test_post_mortem_cause_no_context[0]>(5)main()
944
+ -> raise ValueError("With Cause") from TypeError('The Cause')
945
+ (Pdb) up
946
+ > <doctest test.test_pdb.test_post_mortem_cause_no_context[1]>(5)test_function()
947
+ -> main()
948
+ (Pdb) down
949
+ > <doctest test.test_pdb.test_post_mortem_cause_no_context[0]>(5)main()
950
+ -> raise ValueError("With Cause") from TypeError('The Cause')
951
+ (Pdb) exit"""
952
+
953
+
954
+ def test_post_mortem_context_of_the_cause ():
955
+ """Test post mortem traceback debugging of chained exception
956
+
957
+
958
+ >>> def main():
959
+ ... try:
960
+ ... raise TypeError('Context of the cause')
961
+ ... except Exception as e1:
962
+ ... try:
963
+ ... raise ValueError('Root Cause')
964
+ ... except Exception as e2:
965
+ ... ex = e2
966
+ ... raise ValueError("With Cause, and cause has context") from ex
967
+
968
+ >>> def test_function():
969
+ ... import pdb;
970
+ ... instance = pdb.Pdb(nosigint=True, readrc=False)
971
+ ... try:
972
+ ... main()
973
+ ... except Exception as e:
974
+ ... # same as pdb.post_mortem(e), but with custom pdb instance.
975
+ ... instance.reset()
976
+ ... instance.interaction(None, e)
977
+
978
+ >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
979
+ ... 'exceptions',
980
+ ... 'exceptions 2',
981
+ ... 'up',
982
+ ... 'down',
983
+ ... 'exceptions 3',
984
+ ... 'up',
985
+ ... 'down',
986
+ ... 'exceptions 4',
987
+ ... 'up',
988
+ ... 'down',
989
+ ... 'exit',
990
+ ... ]):
991
+ ... try:
992
+ ... test_function()
993
+ ... except ValueError:
994
+ ... print('Correctly reraised.')
995
+ > <doctest test.test_pdb.test_post_mortem_context_of_the_cause[0]>(9)main()
996
+ -> raise ValueError("With Cause, and cause has context") from ex
997
+ (Pdb) exceptions
998
+ 0 TypeError('Context of the cause')
999
+ 1 ValueError('Root Cause')
1000
+ > 2 ValueError('With Cause, and cause has context')
1001
+ (Pdb) exceptions 2
1002
+ > <doctest test.test_pdb.test_post_mortem_context_of_the_cause[0]>(9)main()
1003
+ -> raise ValueError("With Cause, and cause has context") from ex
1004
+ (Pdb) up
1005
+ > <doctest test.test_pdb.test_post_mortem_context_of_the_cause[1]>(5)test_function()
1006
+ -> main()
1007
+ (Pdb) down
1008
+ > <doctest test.test_pdb.test_post_mortem_context_of_the_cause[0]>(9)main()
1009
+ -> raise ValueError("With Cause, and cause has context") from ex
1010
+ (Pdb) exceptions 3
1011
+ *** No exception with that number
1012
+ (Pdb) up
1013
+ > <doctest test.test_pdb.test_post_mortem_context_of_the_cause[1]>(5)test_function()
1014
+ -> main()
1015
+ (Pdb) down
1016
+ > <doctest test.test_pdb.test_post_mortem_context_of_the_cause[0]>(9)main()
1017
+ -> raise ValueError("With Cause, and cause has context") from ex
1018
+ (Pdb) exceptions 4
1019
+ *** No exception with that number
1020
+ (Pdb) up
1021
+ > <doctest test.test_pdb.test_post_mortem_context_of_the_cause[1]>(5)test_function()
1022
+ -> main()
1023
+ (Pdb) down
1024
+ > <doctest test.test_pdb.test_post_mortem_context_of_the_cause[0]>(9)main()
1025
+ -> raise ValueError("With Cause, and cause has context") from ex
1026
+ (Pdb) exit
1027
+ """
1028
+
1029
+
907
1030
def test_post_mortem ():
908
1031
"""Test post mortem traceback debugging.
909
1032
0 commit comments