Skip to content

Should use annotationlib in Python 3.14 to avoid throwing exceptions when using forward references #572

@ruipin

Description

@ruipin

Currently, using forward references in 3.14 without from __future__ import annotations causes exceptions to be thrown, e.g. my project pygaindalf does not work with the following exception:

Traceback
=========

      File "pygaindalf/.venv/lib/python3.14/site-packages/sphinx/events.py", line 415, in emit
        raise ExtensionError(
        ...<4 lines>...
        ) from exc
    sphinx.errors.ExtensionError: Handler <function process_docstring at 0x7157711fb3d0> for event 'autodoc-process-docstring' threw an exception (exception: name 'PortfolioProtocol' is not defined)

This can be fixed by using annotationlib with format=annotationlib.Format.FORWARDREF instead of accessing __annotations__ directly, whenever annotationlib is available (Python 3.14+).

I implemented a workaround using monkey patches in pygaindalf's conf.py. With this, no exceptions are seen.

Note that sphinx.ext.autodoc has a related bug which also needs to be worked around for forward references to work: sphinx-doc/sphinx#13945

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions