【发布时间】:2017-12-29 01:43:17
【问题描述】:
x = [] 的正确类型提示是什么?
我的 PyCharm 编辑器中的类型检查器将此标记为错误:
labelframes: List[ttk.LabelFrame] = []
“可选”不是一个选项,如:
labelframes: List[Optional[ttk.LabelFrame]] = []
因为typing.Optional 的文档指出这相当于:
labelframes: List[Union[ttk.LabelFrame, None]] = []
而[None] 不是[]。
我应该提一下 PyCharm 也不喜欢这样:
labelframes: List[Union[ttk.LabelFrame, None]] = [None]
无论我尝试什么类型的提示。 PyCharm 将其标记为错误, “预计会返回我的类型提示,没有返回,”所以我尝试了:
labelframes: Optional[List[ttk.LabelFrame, None]] = []
那没用。
我知道 PEP 526 有许多遵循该模式的示例:
x: List[str] = []
【问题讨论】:
-
x: List[str] = []是否在您的编辑器中工作? -
@JohnZwinck。我不清楚您所说的“在我的编辑器中工作”是什么意思。我的编辑器的类型检查器将此标记为错误。否则类型提示将被忽略,并且对 Python 的操作没有影响。除了类型检查之外,代码的执行就像我写的一样,
labelframes = []。 -
mypy没有问题,所以我有足够的信心说这可能是 Pycharm 的类型检查器中的一个错误。在他们的跟踪器中找不到任何相关问题,您可能需要报告此问题。 -
@JimFasarakisHilliard。我还不习惯这是一个 PyCharm 问题。我去了 PEP 484/526 看看是否有一个
Null可以以与None相同的方式使用。这将启用以下提示:labelframes: List[Union[ttk.LabelFrame, Null]] = []如果有类似的东西,我没有看到它。这意味着 PEP 中要么存在空白,要么(更有可能)我误解了 PEP。如果 PEP 未定义它,那么 PyCharm 和mypy都没有错。
标签: python python-3.x type-hinting typing