Skip to content

Commit

Permalink
Python traceback: do not require output to be valid
Browse files Browse the repository at this point in the history
which causes Error to be flagged with console outputs that just happen
to look like a traceback

Fixes #2407
  • Loading branch information
birkenfeld committed Apr 12, 2023
1 parent 96a0cdf commit f80f60b
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 2 deletions.
6 changes: 5 additions & 1 deletion CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@ Pygments changelog

Pull request numbers before 2.4.2 are not linked as they refer to the now defunct Bitbucket project.

Version 2.16.0
Version 2.15.1
--------------
(unreleased)

- Fix Python console traceback lexing being too strict (#2407)


Version 2.15.0
--------------
(released April 10th, 2023)
Expand Down Expand Up @@ -68,6 +71,7 @@ Version 2.15.0
for developing are now defined and run through tox. The ``doc`` folder
still contains a ``Makefile`` as an alternative to ``tox -e doc``.


Version 2.14.0
--------------
(released January 1st, 2023)
Expand Down
3 changes: 2 additions & 1 deletion pygments/lexers/python.py
Original file line number Diff line number Diff line change
Expand Up @@ -763,7 +763,8 @@ class PythonTracebackLexer(RegexLexer):
(r'^([^:]+)(: )(.+)(\n)',
bygroups(Generic.Error, Text, Name, Whitespace), '#pop'),
(r'^([a-zA-Z_][\w.]*)(:?\n)',
bygroups(Generic.Error, Whitespace), '#pop')
bygroups(Generic.Error, Whitespace), '#pop'),
default('#pop'),
],
'markers': [
# Either `PEP 657 <https://www.python.org/dev/peps/pep-0657/>`
Expand Down
108 changes: 108 additions & 0 deletions tests/snippets/pycon/multiple_tb.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
---input---
>>> from multiprocessing import Pool
>>> p = Pool(5)
>>> def f(x):
... return x*x
...
>>> with p:
... p.map(f, [1,2,3])
Process PoolWorker-1:
Process PoolWorker-2:
Process PoolWorker-3:
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
AttributeError: Can't get attribute 'f' on <module '__main__' (<class '_frozen_importlib.BuiltinImporter'>)>
AttributeError: Can't get attribute 'f' on <module '__main__' (<class '_frozen_importlib.BuiltinImporter'>)>
AttributeError: Can't get attribute 'f' on <module '__main__' (<class '_frozen_importlib.BuiltinImporter'>)>

---tokens---
'>>> ' Generic.Prompt
'from' Keyword.Namespace
' ' Text
'multiprocessing' Name.Namespace
' ' Text
'import' Keyword.Namespace
' ' Text
'Pool' Name
'\n' Text.Whitespace

'>>> ' Generic.Prompt
'p' Name
' ' Text
'=' Operator
' ' Text
'Pool' Name
'(' Punctuation
'5' Literal.Number.Integer
')' Punctuation
'\n' Text.Whitespace

'>>> ' Generic.Prompt
'def' Keyword
' ' Text
'f' Name.Function
'(' Punctuation
'x' Name
')' Punctuation
':' Punctuation
'\n' Text.Whitespace

'... ' Generic.Prompt
' ' Text
'return' Keyword
' ' Text
'x' Name
'*' Operator
'x' Name
'\n' Text.Whitespace

'...' Generic.Prompt
'\n' Text.Whitespace

'>>> ' Generic.Prompt
'with' Keyword
' ' Text
'p' Name
':' Punctuation
'\n' Text.Whitespace

'... ' Generic.Prompt
' ' Text
'p' Name
'.' Operator
'map' Name
'(' Punctuation
'f' Name
',' Punctuation
' ' Text
'[' Punctuation
'1' Literal.Number.Integer
',' Punctuation
'2' Literal.Number.Integer
',' Punctuation
'3' Literal.Number.Integer
']' Punctuation
')' Punctuation
'\n' Text.Whitespace

'Process PoolWorker-1:\n' Generic.Output

'Process PoolWorker-2:\n' Generic.Output

'Process PoolWorker-3:\n' Generic.Output

'Traceback (most recent call last):\n' Generic.Traceback

'Traceback (most recent call last):\n' Generic.Traceback

'Traceback (most recent call last):\n' Generic.Traceback

'AttributeError' Generic.Error
': ' Text
"Can't get attribute 'f' on <module '__main__' (<class '_frozen_importlib.BuiltinImporter'>)>" Name
'\n' Text.Whitespace

"AttributeError: Can't get attribute 'f' on <module '__main__' (<class '_frozen_importlib.BuiltinImporter'>)>\n" Generic.Output

"AttributeError: Can't get attribute 'f' on <module '__main__' (<class '_frozen_importlib.BuiltinImporter'>)>\n" Generic.Output

0 comments on commit f80f60b

Please sign in to comment.