Skip to content

Do not raise "Enum index should be a string [misc]" for subclasses of Enum  #11039

Open
@ChrisSantosLang

Description

@ChrisSantosLang

Bug Report

The following was raised at https://stackoverflow.com/questions/68974940/how-to-suppress-index-should-be-a-string-type-error-on-subclassed-python-enum?noredirect=1#comment121902783_68974940

import enum

class MyEnumMeta(enum.EnumMeta):
  def __getitem__(self, indexOrSlice):
    if isinstance(indexOrSlice, (int, slice)):
      return list(self)[indexOrSlice]
    else:
      return enum.EnumMeta.__getitem__(self, indexOrSlice)

class MyEnum(enum.Enum, metaclass=MyEnumMeta): pass

class Period(MyEnum):
  A = "a"
  B = "b"
  C = "c"

print(Period["A"])
print(Period[1])    # type: ignore[misc]
print(Period[:2])   # type: ignore[misc]

The author of Python enum (PEP 435) responded that the # type: ignore[misc] should not be needed in this case because MyEnum is different from Enum

In other words, in visit_index_with_type, instead of checking with is_enum, please check whether the object really is an Enum (or at least check whether its __getitem__ differs from that of Enum)

To Reproduce

Apply mypy to the above code without the # type: ignore[misc]

Actual Behavior

mypy reports "Enum index should be a string" and blocks my commit

Your Environment

python 3.7.11

[mypy]
python_version = 3.7
warn_unused_configs = True
no_color_output = True
pretty = True
show_error_codes = True
disallow_subclassing_any = False

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions