NewType定义的MultiList赋值空列表时PyCharm报错原因咨询
问题原因及解决方法
核心原因:NewType创建的是名义类型,而非类型别名
你误解了NewType的作用——它并不是给现有类型起别名,而是创建了一个名义上的新类型。即使MultiList的底层类型是List[List[int]],类型检查器(比如PyCharm使用的检查器)会将这两者视为完全不同的类型,因此直接把空列表[]赋值给MultiList类型的变量会触发类型不匹配的错误。
两种解决方式
1. 仅需要类型别名时:直接赋值替代NewType
如果只是想给List[List[int]]起一个更简洁的名字,不需要区分名义类型,直接用普通赋值定义类型别名即可:
from typing import List MultiList = List[List[int]] def myfunc(): multi: MultiList = [] # 此处不会触发类型错误
2. 需要名义类型时:显式包装实例
如果确实需要通过NewType创建独立的名义类型,必须通过MultiList()包装原类型的实例,让类型检查器识别为MultiList类型:
from typing import List, NewType MultiList = NewType("MultiList", List[List[int]]) def myfunc(): multi: MultiList = MultiList([]) # 显式包装后符合类型要求
内容的提问来源于stack exchange,提问作者Ben Taylor
相关产品推荐
相关产品推荐

