Search code examples
pythondocstringmkdocs

mkdocstrings: ERROR - Error reading page 'codereference.md': <class '_ast.ExtSlice'>


I obtain the following error when typing mkdocs serve in terminal:

ERROR - Error reading page 'codereference.md': <class '_ast.ExtSlice'> (with a very long traceback, see below)

My mkdocs.yaml file is:

site_name: Code Documentation
site_url: https://example.com/
nav:
  - Home: index.md
  - About: about.md
  - Code: codereference.md
theme: readthedocs
plugins:
  - mkdocstrings:
      handlers:
        python:
          paths: [.]

The codereference.md file consists of the following:

# Reference

::: path.to.class.from.where.mkdocsyaml.is

Anybody have any possible answers?

The full traceback is:

Traceback (most recent call last):
  File "/usr/local/bin/mkdocs", line 8, in <module>
    sys.exit(cli())
  File "/usr/local/lib/python3.8/dist-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.8/dist-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.8/dist-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.8/dist-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/mkdocs/__main__.py", line 181, in serve_command
    serve.serve(dev_addr=dev_addr, livereload=livereload, watch=watch, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/mkdocs/commands/serve.py", line 63, in serve
    config = builder()
  File "/usr/local/lib/python3.8/dist-packages/mkdocs/commands/serve.py", line 58, in builder
    build(config, live_server=live_server, dirty=dirty)
  File "/usr/local/lib/python3.8/dist-packages/mkdocs/commands/build.py", line 292, in build
    _populate_page(file.page, config, files, dirty)
  File "/usr/local/lib/python3.8/dist-packages/mkdocs/commands/build.py", line 174, in _populate_page
    page.render(config, files)
  File "/usr/local/lib/python3.8/dist-packages/mkdocs/structure/pages.py", line 175, in render
    self.content = md.convert(self.markdown)
  File "/usr/local/lib/python3.8/dist-packages/markdown/core.py", line 264, in convert
    root = self.parser.parseDocument(self.lines).getroot()
  File "/usr/local/lib/python3.8/dist-packages/markdown/blockparser.py", line 90, in parseDocument
    self.parseChunk(self.root, '\n'.join(lines))
  File "/usr/local/lib/python3.8/dist-packages/markdown/blockparser.py", line 105, in parseChunk
    self.parseBlocks(parent, text.split('\n\n'))
  File "/usr/local/lib/python3.8/dist-packages/markdown/blockparser.py", line 123, in parseBlocks
    if processor.run(parent, blocks) is not False:
  File "/usr/local/lib/python3.8/dist-packages/mkdocstrings/extension.py", line 121, in run
    html, handler, data = self._process_block(identifier, block, heading_level)
  File "/usr/local/lib/python3.8/dist-packages/mkdocstrings/extension.py", line 195, in _process_block
    data: CollectorItem = handler.collect(identifier, options)
  File "/usr/local/lib/python3.8/dist-packages/mkdocstrings_handlers/python/handler.py", line 191, in collect
    loader.load_module(module_name)
  File "/usr/local/lib/python3.8/dist-packages/griffe/loader.py", line 148, in load_module
    top_module = self._load_module(package.name, package.path, submodules=submodules)
  File "/usr/local/lib/python3.8/dist-packages/griffe/loader.py", line 352, in _load_module
    return self._load_module_path(module_name, module_path, submodules, parent)
  File "/usr/local/lib/python3.8/dist-packages/griffe/loader.py", line 380, in _load_module_path
    self._load_submodules(module)
  File "/usr/local/lib/python3.8/dist-packages/griffe/loader.py", line 385, in _load_submodules
    self._load_submodule(module, subparts, subpath)
  File "/usr/local/lib/python3.8/dist-packages/griffe/loader.py", line 396, in _load_submodule
    member_parent[subparts[-1]] = self._load_module(
  File "/usr/local/lib/python3.8/dist-packages/griffe/loader.py", line 352, in _load_module
    return self._load_module_path(module_name, module_path, submodules, parent)
  File "/usr/local/lib/python3.8/dist-packages/griffe/loader.py", line 374, in _load_module_path
    module = self._visit_module(code, module_name, module_path, parent)
  File "/usr/local/lib/python3.8/dist-packages/griffe/loader.py", line 413, in _visit_module
    module = visit(
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 92, in visit
    return Visitor(
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 172, in get_module
    self.visit(top_node)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 183, in visit
    super().visit(node)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/base.py", line 19, in visit
    getattr(self, f"visit_{node.kind}", self.generic_visit)(node)  # type: ignore[attr-defined]
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 214, in visit_module
    self.generic_visit(node)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 196, in generic_visit
    self.visit(child)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 183, in visit
    super().visit(node)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/base.py", line 19, in visit
    getattr(self, f"visit_{node.kind}", self.generic_visit)(node)  # type: ignore[attr-defined]
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 255, in visit_classdef
    self.generic_visit(node)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 196, in generic_visit
    self.visit(child)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 183, in visit
    super().visit(node)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/base.py", line 19, in visit
    getattr(self, f"visit_{node.kind}", self.generic_visit)(node)  # type: ignore[attr-defined]
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 451, in visit_functiondef
    self.handle_function(node)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 442, in handle_function
    self.generic_visit(node)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 196, in generic_visit
    self.visit(child)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 183, in visit
    super().visit(node)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/base.py", line 19, in visit
    getattr(self, f"visit_{node.kind}", self.generic_visit)(node)  # type: ignore[attr-defined]
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 589, in visit_assign
    self.handle_attribute(node)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/visitor.py", line 548, in handle_attribute
    value = get_value(node.value)  # type: ignore[arg-type]
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/nodes.py", line 1181, in get_value
    return _node_value_map[type(node)](node)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/nodes.py", line 1047, in _get_subscript_value
    subscript = _get_value(node.slice)
  File "/usr/local/lib/python3.8/dist-packages/griffe/agents/nodes.py", line 1167, in _get_value
    return _node_value_map[type(node)](node)
KeyError: <class '_ast.ExtSlice'>

Solution

  • It's fixed in version 0.21.0 of Griffe: https://mkdocstrings.github.io/griffe/changelog/#bug-fixes

    It would previously crash when unparsing values using extended slices such as o[x:y,z].