ValueProxy[int]类型注解报错'type' object is not subscriptable如何处理
问题原因
你遇到的报错是因为Python 3.10及更早版本中,multiprocessing.managers.ValueProxy 未实现泛型下标能力,运行时解析类型注解时,无法识别ValueProxy[int]这种带方括号的写法,就会抛出'type' object is not subscriptable错误。
解决方案
方法1:添加future注解声明
在代码文件的最顶部加入from __future__ import annotations,该声明会让Python运行时不直接计算类型注解的值,仅将注解以字符串形式存储,既不会触发运行时报错,也不会影响mypy等类型检查工具对ValueProxy[int]的正常识别。
示例代码:
from __future__ import annotations from multiprocessing.managers import ValueProxy def test(value: ValueProxy[int]): print("foo") test(None)
方法2:用引号包裹类型注解
直接将ValueProxy[int]用单引号或双引号包裹,运行时不会主动解析引号内的注解内容,和方法1效果一致,类型检查工具可正常识别注解含义:
示例代码:
from multiprocessing.managers import ValueProxy def test(value: 'ValueProxy[int]'): print("foo") test(None)
方法3:升级Python版本
如果你使用Python 3.11及以上版本,标准库已经为ValueProxy实现了泛型下标支持,可以直接写ValueProxy[int],不需要额外兼容处理就能正常运行。
内容的提问来源于stack exchange,提问作者Finni
相关产品推荐
相关产品推荐

