Skip to content
This repository was archived by the owner on May 13, 2026. It is now read-only.
This repository was archived by the owner on May 13, 2026. It is now read-only.

return type for lxml.etree.fromstring should be Optional (?) #63

Closed

Description

@DMRobertson

At least with lxml 4.8.0, I see the following:

$ python
Python 3.10.4 (main, Mar 25 2022, 00:00:00) [GCC 11.2.1 20220127 (Red Hat 11.2.1-9)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import lxml.etree as etree
>>> parser = etree.HTMLParser(recover=True, encoding="utf-8")
>>> tree = etree.fromstring(b"", parser)
>>> tree
>>> tree is None
True

But the type annotation says we'll always return an _Element:

def fromstring(
text: _AnyStr, parser: XMLParser = ..., *, base_url: _AnyStr = ...
) -> _Element: ...

Aside: I'm passing an HTMLParser here instead of an XMLParser. The type stub for fromstring doesn't allow that either, but again I'm not sure if that's a mistake in the annotations.

For context, I came across this whilst trying to use the stubs to typecheck this snippet of Synapse.

Activity

  1. scoder commented on May 3, 2022

    @scoder
    Member

    The None return value is a rare artefact of using recover=True with no data, but given that it exists, I agreed on both points, thanks for bringing this up. Maybe you can send a PR for these changes? We might actually be lacking a test for something that passes a parser at all. seems worth adding.

  2. added a commit that references this issue on May 3, 2022
    8970d00
  3. DMRobertson commented on May 3, 2022

    @DMRobertson
    ContributorAuthor

    I've had a go at this in #64---though I'm not massively familiar with lxml's machinery. Hopefully it's a useful drive-by though.

    We might actually be lacking a test for something that passes a parser at all.

    For completeness: I interpreted this as a test in the stubs repository here, rather than a test in lxml proper.

  4. added a commit that references this issue on Jul 26, 2022
    0e97999
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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