##// END OF EJS Templates
Handle OSError cases where traceback frames occur from built files (#13964)...
Handle OSError cases where traceback frames occur from built files (#13964) I've been using the `_render_traceback_` method of the traceback object, provided by the `IPython.core.interactiveshell.InteractiveShell` object that you created, in the `showtraceback` method. Thanks to this, I was able to create better error messages. I appreciate it. The following issue is related to the use of this method. ```python try: # Exception classes can customise their traceback - we # use this in IPython.parallel for exceptions occurring # in the engines. This should return a list of strings. if hasattr(value, "_render_traceback_"): stb = value._render_traceback_() else: stb = self.InteractiveTB.structured_traceback( etype, value, tb, tb_offset=tb_offset ) ``` I noticed that in the recent `8.11` version, code was added to generate a traceback when the source code is too long. In this case, if the `etb.tb_frame` object is a built file or something similar, the `inspect.getsourcelines(etb.tb_frame)` method may raise an error. So I implemented a change to set the `max_len` to the minimum value and avoid the following condition when an `OSError` occurs. I think this approach can handle cases where errors occur while using the `inspect.getsourcelines()` method. If there is anything I have done wrong or any procedures I should follow, please let me know. I would greatly appreciate it if you could leave a comment and I will make the necessary changes immediately. Thank you.

File last commit:

r27909:017b677e merge
r28196:92027083 merge
Show More
test_pygments.py
26 lines | 824 B | text/x-python | PythonLexer
from typing import List
import pytest
import pygments.lexers
import pygments.lexer
from IPython.lib.lexers import IPythonConsoleLexer, IPythonLexer, IPython3Lexer
#: the human-readable names of the IPython lexers with ``entry_points``
EXPECTED_LEXER_NAMES = [
cls.name for cls in [IPythonConsoleLexer, IPythonLexer, IPython3Lexer]
]
@pytest.fixture
def all_pygments_lexer_names() -> List[str]:
"""Get all lexer names registered in pygments."""
return {l[0] for l in pygments.lexers.get_all_lexers()}
@pytest.mark.parametrize("expected_lexer", EXPECTED_LEXER_NAMES)
def test_pygments_entry_points(
expected_lexer: str, all_pygments_lexer_names: List[str]
) -> None:
"""Check whether the ``entry_points`` for ``pygments.lexers`` are correct."""
assert expected_lexer in all_pygments_lexer_names