@@ -48,10 +48,21 @@ class ConsolePrEdit(QTextEdit):
4848 def __init__ (self , parent ):
4949 super (ConsolePrEdit , self ).__init__ (parent )
5050
51- # For workboxes, use this regex pattern, so we can extract workboxName
52- # and lineNum
51+ # For Traceback workbox lines, use this regex pattern, so we can extract
52+ # workboxName and lineNum. Note that Syntax errors present slightly
53+ # differently than other Exceptions.
54+ # SyntaxErrors:
55+ # - Do NOT include the text ", in" followed by a module
56+ # - DO include the offending line of code
57+ # Other Exceptions
58+ # - DO include the text ", in" followed by a module
59+ # - Do NOT include the offending line of code if from stdIn (ie
60+ # a workbox)
61+ # So we will use the presence of the text ", in" to tell use whether to
62+ # fake the offending code line or not.
5363 pattern = r'File "<Workbox(?:Selection)?>:(?P<workboxName>.*)", '
54- pattern += r'line (?P<lineNum>\d{1,6}), in'
64+ pattern += r'line (?P<lineNum>\d{1,6})'
65+ pattern += r'(?P<inStr>, in)?'
5566 self .workbox_pattern = re .compile (pattern )
5667
5768 # Define a pattern to capture info from tracebacks. The newline/$ section
@@ -974,14 +985,17 @@ def write(self, msg, error=False):
974985
975986 # Starting in Python 3, tracebacks don't include the code executed
976987 # for stdin, so workbox code won't appear. This attempts to include
977- # it.
988+ # it. There is an exception for SyntaxErrors, which DO include the
989+ # offending line of code, so in those cases (indicated by lack of
990+ # inStr from the regex search) we skip faking the code line.
978991 if isWorkbox :
979992 match = self .workbox_pattern .search (msg )
980993 workboxName = match .groupdict ().get ("workboxName" )
981994 lineNum = int (match .groupdict ().get ("lineNum" )) - 1
995+ inStr = match .groupdict ().get ("inStr" , "" )
982996
983997 workboxLine = self .getWorkboxLine (workboxName , lineNum )
984- if workboxLine :
998+ if workboxLine and inStr :
985999 indent = self .getIndentForCodeTracebackLine (msg )
9861000 msg = "{}{}{}" .format (msg , indent , workboxLine )
9871001
0 commit comments