3030log = logging .getLogger (__name__ )
3131
3232
33- def get_friendly_object ( e ):
33+ def friendly_message ( e , double_newline : bool ):
3434 try :
3535 fr = FriendlyTraceback (type (e ), e , e .__traceback__ )
36- return fr
36+ fr .assign_generic ()
37+ fr .assign_cause ()
38+
39+ return fr .info ["generic" ] + "\n " + double_newline * "\n " + fr .info .get ("cause" , "" )
3740 except (Exception , SystemExit ):
38- log .exception ("Failed to build FriendlyTraceback object" )
41+ log .exception ("Failed to build friendly message" )
42+ return ""
3943
4044
4145def didyoumean_suggestions (e ) -> List [str ]:
@@ -48,44 +52,8 @@ def didyoumean_suggestions(e) -> List[str]:
4852 return []
4953
5054
51- def friendly_generic (fr : FriendlyTraceback ):
52- try :
53- fr .assign_generic ()
54- return fr .info ["generic" ]
55- except Exception :
56- log .exception ("Failed to get generic friendly explanation" )
57- return ""
58-
59-
60- def friendly_syntax_cause (fr : FriendlyTraceback ):
61- try :
62- fr .set_cause_syntax ()
63- return fr .info ["cause" ]
64- # return _friendly_cause(e, lambda info: analyze_syntax.set_cause_syntax(type(e), e))
65- except Exception :
66- log .exception ("Failed to get syntax cause of exception" )
67-
68-
69- def _friendly_cause (fr : FriendlyTraceback ):
70- try :
71- cause = str ()
72- fr .assign_cause ()
73- if "cause" in fr .info :
74- cause = fr .info ["cause" ]
75- except Exception :
76- log .exception ("Failed to get likely cause of exception" )
77- return ""
78- else :
79- return cause
80-
81-
82- def friendly_runtime_cause (fr ):
83- return _friendly_cause (fr )
84-
85-
8655def print_friendly_syntax_error (e ):
8756 lines = iter (traceback .format_exception (* sys .exc_info ()))
88- fr = get_friendly_object (e )
8957 for line in lines :
9058 if line .strip ().startswith ('File "my_program.py"' ):
9159 break
@@ -94,11 +62,12 @@ def print_friendly_syntax_error(e):
9462{ '' .join (lines ).rstrip ()}
9563at line { e .lineno }
9664
97- { friendly_generic (fr )}
98- { friendly_syntax_cause (fr )}
65+ { friendly_message (e , double_newline = False )}
9966""" ,
10067 file = sys .stderr ,
10168 )
69+
70+
10271class TracebackSerializer :
10372 def format_exception (self , e ) -> List [dict ]:
10473 if e .__cause__ is not None :
@@ -109,8 +78,6 @@ def format_exception(self, e) -> List[dict]:
10978 result [- 1 ]["tail" ] = traceback ._context_message
11079 else :
11180 result = []
112- # create FriendlyTraceback object
113- fr = get_friendly_object (e )
11481
11582 result .append (
11683 dict (
@@ -121,9 +88,7 @@ def format_exception(self, e) -> List[dict]:
12188 ),
12289 tail = "" ,
12390 didyoumean = didyoumean_suggestions (e ),
124- friendly = markdown (
125- friendly_generic (fr ) + "\n \n " + friendly_runtime_cause (fr )
126- ),
91+ friendly = markdown (friendly_message (e , double_newline = True )),
12792 )
12893 )
12994 return result
0 commit comments