gpt4 book ai didi

python - 如何在子类 python 枚举上抑制 "index should be a string"类型错误

转载 作者:行者123 更新时间:2023-12-04 12:28:05 24 4
gpt4 key购买 nike

以下访问python的示例Enum按切片的成员来自其 documentation (其中 Period 恰好是 Enum ):

list(Period)[:2]
子类化时 Enum ,我认为允许跳过 list 中的换行的语法可能是有意义的。 (即使使用我的子类的语法与访问 listtuple 的成员的语法更加一致):
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]
虽然这似乎执行得很好, mypy除非我附加 # type: ignore[misc],否则会引发以下错误对于试图使用“更简洁”语法的每一行(这使得语法实际上不那么简洁):

Enum index should be a string


(您可以在 mypy code 中搜索此内容,以查看相关部分)
我不喜欢添加一个语句来抑制发生在同一行中的任何合法的 [misc] 错误。此外,mypy 努力引发这个错误(而且 Enum 不允许直接使用压缩语法)这一事实让我想知道是否有充分的理由不能访问 Enum。成员通过整数或切片,甚至以 Enum 中演示的方式文档。
如果我不应该做我想做的事情,有人可以解释为什么吗?否则,有人可以建议更好的方法来处理 mypy 吗?如果 mypy 发生了未能预料到 Enum 的错误它遇到的实际上可能是 Enum 的子类覆盖 __getitem__正如我所建议的,我该如何报告该错误?

最佳答案

您的更改没有任何问题。但是,Mypy 对枚举支持进行了硬编码,因此它无法识别它们。

关于python - 如何在子类 python 枚举上抑制 "index should be a string"类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68974940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com