Python中文
首页
教程
问答
标签
搜索
登录
注册
如何抑制子类python枚举上的“索引应为字符串”类型错误
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>以下通过切片访问python<code>Enum</code>成员的示例来自其<a href="https://docs.python.org/3/library/enum.html" rel="nofollow noreferrer">documentation</a>(其中<code>Period</code>恰好是一个<code>Enum</code>):</p> <pre><code>list(Period)[:2] </code></pre> <p>当对<code>Enum</code>进行子类化时,我认为允许使用跳过<code>list</code>中包装的语法是有意义的(即,使使用我的子类的语法与访问<code>list</code>或<code>tuple</code>成员的语法更一致):</p> <pre><code>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] </code></pre> <p>尽管这似乎执行得很好,<code>mypy</code>会引发以下错误,除非我将<code># type: ignore[misc]</code>附加到试图使用“更精简”语法的每一行(这使得语法实际上<em>更精简):</p> <blockquote> <p>Enum index should be a string</p> </blockquote> <p>(您可以在<a href="https://github.com/python/mypy/blob/master/mypy/checkexpr.py" rel="nofollow noreferrer">mypy code</a>中搜索,以查看相关部分)</p> <p>我不喜欢添加一个语句,它将抑制发生在同一行中的任何合法[misc]错误。此外,mypy努力提出这个错误(而且<code>Enum</code>不允许直接使用压缩语法)这一事实让我想知道,是否有一些很好的理由说明,即使以<code>Enum</code>文档中演示的方式,也不可能通过整数或切片访问<code>Enum</code>成员</p> <p>如果我不应该做我想做的事,有人能解释一下原因吗?否则,有人能建议一个更好的方法来处理mypy吗?如果mypy犯了一个错误,没有预料到它遇到的<code>Enum</code>实际上可能是<code>Enum</code>的子类,正如我所建议的那样覆盖<code>__getitem__</code>,我如何报告该错误</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>您的更改没有问题。然而,Mypy的枚举支持是硬编码的,所以它无法识别它们</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
当用户用PYTHON设置一个或一个不带值的URL时,他们怎么能输入一个/a的代码呢?
2 回答
当用户登录到站点时,如何显示不同的导航栏
3 回答
当用户登录时,在Flask中向用户显示处理结果
1 回答
当用户的Flask会话结束时,我如何从Redis后端中移除所有Celery结果?
2 回答
当用户的Okta配置文件字段当前为blan时,更新该字段
1 回答
当用户的付款逾期2天时,从Django模型检索数据
5 回答
当用户的消息以问号结尾时,如何让机器人说些什么?
2 回答
当用户的系统上可能也安装了Python 2.7时,如何在用户的系统上运行Python 3脚本?
9 回答
当用户确定打印数量时,使用Matplotlib打印动画
9 回答
当用户离开时是否可以删除整个网页?
4 回答
当用户给出一个单词时如何打印?
9 回答
当用户继续更改TKin中的值(使用trace方法)时,使用Entry并更新输入的条目
2 回答
当用户编辑表单字段时,从Django时间字段中删除秒数
9 回答
当用户被更改时,消息不会来自web套接字
5 回答
当用户访问表单时,如何使表单为只读,而不具有更改权限
2 回答
当用户试图更改对象的值时,使用描述符类引发RuntimeError
3 回答
当用户调整GUI的大小时,是否有方法更改GUI内容的大小?
1 回答
当用户调整风的大小时,pythontkinter小部件的大小会不均匀
2 回答
当用户购买某个类别时,是否查找其他类别的销售?
1 回答
当用户转到上一页时,Django和芹菜插入操作
3 回答