Skip to content

Cannot call issubclass() against typing.Protocol on Python 3.12 #105237

Closed
@AlexWaygood

Description

@AlexWaygood

Bug report

On Python 3.11, you can do this:

>>> import typing
>>> issubclass(object, typing.Protocol)
False

But on Python 3.12 (following the backport of c05c31d), this raises:

>>> import typing
>>> issubclass(object, typing.Protocol)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\alexw\coding\cpython\Lib\typing.py", line 1797, in __subclasscheck__
    raise TypeError(
TypeError: Instance and class checks can only be used with @runtime_checkable protocols

The new behaviour doesn't make sense. That TypeError should only be triggered if a user is calling issubclass() against a subclass of typing.Protocol. typing.Protocol itself should be exempted.

Linked PRs

Metadata

Metadata

Assignees

Labels

3.12only security fixes3.13bugs and security fixestopic-typingtype-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions