以下代码在python 3.7.4中运行良好,没有任何警告。
from typing import Any, Dict, NewType
DocType = NewType('DocType', Dict[str, Any])
def print_doc(doc: DocType):
for key, val in doc.items():
print("key %s val %s" % (key, val))
print_doc({'a': 1, 'b': '2'})
但是,在PyCharm(社区2019.2)中,我在最后一行收到警告:
Expected type 'DocType', got 'Dict[str, Union[int, str]]' instead.
我如何通知PyCharm一切正常?
PyCharm提供的选项是禁止对该行的检查,并完全关闭类型检查。看起来都不是太好。
编辑:如果我没有定义自己的DocType,而是放入Dict[str, Any]
函数原型中,则警告消失。我想这是一种解决方法。
NewType
将您标记DocType
为的子类型dict
,并且由于您要传递字典(是的超类型DocType
),因此PyCharm会将其正确标记为错误。
您可以将变量实例化为DocType
:
from typing import Any, Dict, NewType
DocType = NewType('DocType', Dict[str, Any])
def print_doc(doc: DocType) -> None:
for key, val in doc.items():
print("key %s val %s" % (key, val))
print_doc(DocType({'a': 1, 'b': '2'}))
或创建类型别名
from typing import Any, Dict, NewType
DocType = Dict[str, Any]
def print_doc(doc: DocType) -> None:
for key, val in doc.items():
print("key %s val %s" % (key, val))
print_doc({'a': 1, 'b': '2'})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句