Skip to content

BUG: Docs won't build (Unexpected exception in doc\source\user_guide\enhancingperf.rst) #60149

Open
@Ravenin7

Description

Pandas version checks

  • I have checked that this issue has not already been reported.

  • I have confirmed this bug exists on the latest version of pandas.

  • I have confirmed this bug exists on the main branch of pandas.

Reproducible Example

git clone https://github.com/pandas-dev/pandas.git
cd pandas
conda env create --file environment.yml
conda activate pandas-dev
python -m pip install -ve . --no-build-isolation --config-settings editable-verbose=true
cd doc

python make.py html
python make.py clean
python make.py --single user_guide/enhancingperf.rst

Issue Description

I was following the steps to build the documentation as given here, but while running python make.py html it failed when building user_guide/enhancingperf.rst :

WARNING: ources... [ 95%] user_guide/enhancingperf
>>>-------------------------------------------------------------------------
Exception in C:\Users\91942\Documents\GitHub\pandas\doc\source\user_guide\enhancingperf.rst at block ending on line 101
Specify :okexcept: as an option in the ipython:: block to suppress this message
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[6], line 1
----> 1 get_ipython().run_line_magic('prun', '-l 4 df.apply(lambda x: integrate_f(x["a"], x["b"], x["N"]), axis=1)  # noqa E999')

File ~\anaconda3\envs\pandas-dev\lib\site-packages\IPython\core\interactiveshell.py:2480, in InteractiveShell.run_line_magic(self, magic_name, line, _stack_depth)
   2478     kwargs['local_ns'] = self.get_local_scope(stack_depth)
   2479 with self.builtin_trap:
-> 2480     result = fn(*args, **kwargs)
   2482 # The code below prevents the output from being displayed
   2483 # when using magics with decorator @output_can_be_silenced
   2484 # when the last Python token in the expression is a ';'.
   2485 if getattr(fn, magic.MAGIC_OUTPUT_CAN_BE_SILENCED, False):

File ~\anaconda3\envs\pandas-dev\lib\site-packages\IPython\core\magics\execution.py:317, in ExecutionMagics.prun(self, parameter_s, cell)
    315     arg_str += '\n' + cell
    316 arg_str = self.shell.transform_cell(arg_str)
--> 317 return self._run_with_profiler(arg_str, opts, self.shell.user_ns)

File ~\anaconda3\envs\pandas-dev\lib\site-packages\IPython\core\magics\execution.py:339, in ExecutionMagics._run_with_profiler(self, code, opts, namespace)
    337 prof = profile.Profile()
    338 try:
--> 339     prof = prof.runctx(code, namespace, namespace)
    340     sys_exit = ''
    341 except SystemExit:

File ~\anaconda3\envs\pandas-dev\lib\cProfile.py:101, in Profile.runctx(self, cmd, globals, locals)
     99 self.enable()
    100 try:
--> 101     exec(cmd, globals, locals)
    102 finally:
    103     self.disable()

File <string>:1

File ~\Documents\GitHub\pandas\pandas\core\frame.py:10398, in DataFrame.apply(self, func, axis, raw, result_type, args, by_row, engine, engine_kwargs, **kwargs)
  10384 from pandas.core.apply import frame_apply
  10386 op = frame_apply(
  10387     self,
  10388     func=func,
   (...)
  10396     kwargs=kwargs,
  10397 )
> 10398 return op.apply().__finalize__(self, method="apply")

File ~\Documents\GitHub\pandas\pandas\core\apply.py:903, in FrameApply.apply(self)
    900 elif self.raw:
    901     return self.apply_raw(engine=self.engine, engine_kwargs=self.engine_kwargs)
--> 903 return self.apply_standard()

File ~\Documents\GitHub\pandas\pandas\core\apply.py:1054, in FrameApply.apply_standard(self)
   1052 def apply_standard(self):
   1053     if self.engine == "python":
-> 1054         results, res_index = self.apply_series_generator()
   1055     else:
   1056         results, res_index = self.apply_series_numba()

File ~\Documents\GitHub\pandas\pandas\core\apply.py:1070, in FrameApply.apply_series_generator(self)
   1067 results = {}
   1069 for i, v in enumerate(series_gen):
-> 1070     results[i] = self.func(v, *self.args, **self.kwargs)
   1071     if isinstance(results[i], ABCSeries):
   1072         # If we have a view on v, we need to make a copy because
   1073         #  series_generator will swap out the underlying data
   1074         results[i] = results[i].copy(deep=False)

File <string>:1, in <lambda>(x)

File ~\Documents\GitHub\pandas\pandas\core\series.py:969, in Series.__getitem__(self, key)
    966     key = np.asarray(key, dtype=bool)
    967     return self._get_rows_with_mask(key)
--> 969 return self._get_with(key)

File ~\Documents\GitHub\pandas\pandas\core\series.py:981, in Series._get_with(self, key)
    978 elif isinstance(key, tuple):
    979     return self._get_values_tuple(key)
--> 981 return self.loc[key]

File ~\Documents\GitHub\pandas\pandas\core\indexing.py:1195, in _LocationIndexer.__getitem__(self, key)
   1193 maybe_callable = com.apply_if_callable(key, self.obj)
   1194 maybe_callable = self._raise_callable_usage(key, maybe_callable)
-> 1195 return self._getitem_axis(maybe_callable, axis=axis)

File ~\Documents\GitHub\pandas\pandas\core\indexing.py:1424, in _LocIndexer._getitem_axis(self, key, axis)
   1421     if hasattr(key, "ndim") and key.ndim > 1:
   1422         raise ValueError("Cannot index with multidimensional key")
-> 1424     return self._getitem_iterable(key, axis=axis)
   1426 # nested tuple slicing
   1427 if is_nested_tuple(key, labels):

File ~\Documents\GitHub\pandas\pandas\core\indexing.py:1364, in _LocIndexer._getitem_iterable(self, key, axis)
   1361 self._validate_key(key, axis)
   1363 # A collection of keys
-> 1364 keyarr, indexer = self._get_listlike_indexer(key, axis)
   1365 return self.obj._reindex_with_indexers(
   1366     {axis: [keyarr, indexer]}, allow_dups=True
   1367 )

File ~\Documents\GitHub\pandas\pandas\core\indexing.py:1562, in _LocIndexer._get_listlike_indexer(self, key, axis)
   1559 ax = self.obj._get_axis(axis)
   1560 axis_name = self.obj._get_axis_name(axis)
-> 1562 keyarr, indexer = ax._get_indexer_strict(key, axis_name)
   1564 return keyarr, indexer

File ~\Documents\GitHub\pandas\pandas\core\indexes\base.py:6056, in Index._get_indexer_strict(self, key, axis_name)
   6053 else:
   6054     keyarr, indexer, new_indexer = self._reindex_non_unique(keyarr)
-> 6056 self._raise_if_missing(keyarr, indexer, axis_name)
   6058 keyarr = self.take(indexer)
   6059 if isinstance(key, Index):
   6060     # GH 42790 - Preserve name from an Index

File ~\Documents\GitHub\pandas\pandas\core\indexes\base.py:6108, in Index._raise_if_missing(self, key, indexer, axis_name)
   6105     raise KeyError(f"None of [{key}] are in the [{axis_name}]")
   6107 not_found = list(ensure_index(key)[missing_mask.nonzero()[0]].unique())
-> 6108 raise KeyError(f"{not_found} not in index")

KeyError: "['c'] not in index"

<<<-------------------------------------------------------------------------

Exception occurred:
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\IPython\sphinxext\ipython_directive.py", line 584, in process_input
    raise RuntimeError(
RuntimeError: Unexpected exception in `C:\Users\91942\Documents\GitHub\pandas\doc\source\user_guide\enhancingperf.rst` line 101
The full traceback has been saved in C:\Users\91942\AppData\Local\Temp\sphinx-err-5kwabx28.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!

The same error occurs while running python make.py --single user_guide/enhancingperf.rst.

Full traceback given in sphinx-err-5kwabx28.log is:

# Platform:         win32; (Windows-10-10.0.22631-SP0)
# Sphinx version:   8.1.3
# Python version:   3.10.15 (CPython)
# Docutils version: 0.21.2
# Jinja2 version:   3.1.4
# Pygments version: 2.18.0

# Last messages:
#   user_guide/dsintro
#   
#   
#   reading sources... [ 95%]
#   user_guide/duplicates
#   
#   
#   reading sources... [ 95%]
#   user_guide/enhancingperf
#   

# Loaded extensions:
#   sphinx.ext.mathjax (8.1.3)
#   alabaster (1.0.0)
#   sphinxcontrib.applehelp (2.0.0)
#   sphinxcontrib.devhelp (2.0.0)
#   sphinxcontrib.htmlhelp (2.1.0)
#   sphinxcontrib.serializinghtml (1.1.10)
#   sphinxcontrib.qthelp (2.0.0)
#   contributors (0.1)
#   IPython.sphinxext.ipython_directive (unknown version)
#   IPython.sphinxext.ipython_console_highlighting (unknown version)
#   matplotlib.sphinxext.plot_directive (3.9.2)
#   sphinx.ext.autodoc.preserve_defaults (8.1.3)
#   sphinx.ext.autodoc.type_comment (8.1.3)
#   sphinx.ext.autodoc.typehints (8.1.3)
#   sphinx.ext.autodoc (8.1.3)
#   sphinx.ext.autosummary (8.1.3)
#   numpydoc (1.8.0)
#   sphinx_copybutton (0.5.2)
#   sphinx_design (0.6.1)
#   sphinx.ext.coverage (8.1.3)
#   sphinx.ext.doctest (8.1.3)
#   sphinx.ext.extlinks (8.1.3)
#   sphinx.ext.ifconfig (8.1.3)
#   sphinx.ext.intersphinx (8.1.3)
#   sphinx.ext.linkcode (8.1.3)
#   sphinx.ext.todo (8.1.3)
#   nbsphinx (0.9.5)
#   pydata_sphinx_theme (unknown version)

# Traceback:
Traceback (most recent call last):
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\sphinx\cmd\build.py", line 514, in build_main
    app.build(args.force_all, args.filenames)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\sphinx\application.py", line 381, in build
    self.builder.build_update()
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\sphinx\builders\__init__.py", line 358, in build_update
    self.build(
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\sphinx\builders\__init__.py", line 385, in build
    updated_docnames = set(self.read())
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\sphinx\builders\__init__.py", line 502, in read
    self._read_serial(docnames)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\sphinx\builders\__init__.py", line 567, in _read_serial
    self.read_doc(docname)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\sphinx\builders\__init__.py", line 630, in read_doc
    publisher.publish()
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\core.py", line 234, in publish
    self.document = self.reader.read(self.source, self.parser,
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\sphinx\io.py", line 106, in read
    self.parse()
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\readers\__init__.py", line 76, in parse
    self.parser.parse(self.input, document)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\sphinx\parsers.py", line 85, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 169, in run
    results = StateMachineWS.run(self, input_lines, input_offset,
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\statemachine.py", line 233, in run
    context, next_state, result = self.check_line(
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\statemachine.py", line 445, in check_line
    return method(match, context, next_state)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 3034, in text
    self.section(title.lstrip(), source, style, lineno + 1, messages)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 325, in section
    self.new_subsection(title, lineno, messages)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 391, in new_subsection
    newabsoffset = self.nested_parse(
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 279, in nested_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 195, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\statemachine.py", line 233, in run
    context, next_state, result = self.check_line(
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\statemachine.py", line 445, in check_line
    return method(match, context, next_state)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 2790, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 325, in section
    self.new_subsection(title, lineno, messages)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 391, in new_subsection
    newabsoffset = self.nested_parse(
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 279, in nested_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 195, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\statemachine.py", line 233, in run
    context, next_state, result = self.check_line(
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\statemachine.py", line 445, in check_line
    return method(match, context, next_state)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 2790, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 325, in section
    self.new_subsection(title, lineno, messages)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 391, in new_subsection
    newabsoffset = self.nested_parse(
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 279, in nested_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 195, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\statemachine.py", line 233, in run
    context, next_state, result = self.check_line(
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\statemachine.py", line 445, in check_line
    return method(match, context, next_state)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 2357, in explicit_markup
    nodelist, blank_finish = self.explicit_construct(match)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 2369, in explicit_construct
    return method(self, expmatch)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 2106, in directive
    return self.run_directive(
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\docutils\parsers\rst\states.py", line 2156, in run_directive
    result = directive_instance.run()
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\IPython\sphinxext\ipython_directive.py", line 1033, in run
    rows, figure = self.shell.process_block(block)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\IPython\sphinxext\ipython_directive.py", line 732, in process_block
    self.process_input(data, input_prompt, lineno)
  File "C:\Users\91942\anaconda3\envs\pandas-dev\lib\site-packages\IPython\sphinxext\ipython_directive.py", line 584, in process_input
    raise RuntimeError(
RuntimeError: Unexpected exception in `C:\Users\91942\Documents\GitHub\pandas\doc\source\user_guide\enhancingperf.rst` line 101

The issue appears to be with this line:

Should I add :okexcept: to the block to suppress this message?

Expected Behavior

HTML doc should be successfully built.

Installed Versions

INSTALLED VERSIONS

commit : 7bd594c
python : 3.10.15
python-bits : 64
OS : Windows
OS-release : 10
Version : 10.0.22631
machine : AMD64
processor : Intel64 Family 6 Model 154 Stepping 4, GenuineIntel
byteorder : little
LC_ALL : None
LANG : None
LOCALE : English_India.1252

pandas : 3.0.0.dev0+1600.g7bd594c81a
numpy : 1.26.4
dateutil : 2.9.0
pip : 24.3.1
Cython : 3.0.11
sphinx : 8.1.3
IPython : 8.29.0
adbc-driver-postgresql: None
adbc-driver-sqlite : None
bs4 : 4.12.3
blosc : None
bottleneck : 1.4.2
fastparquet : 2024.5.0
fsspec : 2024.10.0
html5lib : 1.1
hypothesis : 6.115.6
gcsfs : 2024.10.0
jinja2 : 3.1.4
lxml.etree : 5.3.0
matplotlib : 3.9.2
numba : 0.60.0
numexpr : 2.10.1
odfpy : None
openpyxl : 3.1.5
psycopg2 : 2.9.9
pymysql : 1.4.6
pyarrow : 18.0.0
pyreadstat : 1.2.8
pytest : 8.3.3
python-calamine : None
pytz : 2024.2
pyxlsb : 1.0.10
s3fs : 2024.10.0
scipy : 1.14.1
sqlalchemy : 2.0.36
tables : 3.10.1
tabulate : 0.9.0
xarray : 2024.9.0
xlrd : 2.0.1
xlsxwriter : 3.2.0
zstandard : 0.23.0
tzdata : 2024.2
qtpy : None
pyqt5 : None

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions