繁体   English   中英

mypy 不兼容类型列表<nothing>有类型列表<str></str></nothing>

[英]mypy incompatible types list<nothing> has the type list<str>

我正在使用带有代码的提示工具包 python 库:

from __future__ import annotations
from prompt_toolkit.shortcuts import checkboxlist_dialog

results: list[str] = checkboxlist_dialog(
    title="CheckboxList dialog",
    text="What would you like in your breakfast ?",
    values=[
        ("eggs", "Eggs"),
        ("bacon", "Bacon"),
        ("croissants", "20 Croissants"),
        ("daily", "The breakfast of the day"),
    ],
).run()

当我运行 mypy 0.931 时,我得到:

test.py:4: error: Incompatible types in assignment (expression has type "List[<nothing>]", variable has type "List[str]")
test.py:4: note: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance
test.py:4: note: Consider using "Sequence" instead, which is covariant
test.py:7: error: Argument "values" to "checkboxlist_dialog" has incompatible type "List[Tuple[str, str]]"; expected "Optional[List[Tuple[<nothing>, Union[str, MagicFormattedText, List[Union[Tuple[str, str], Tuple[str, str, Callable[[MouseEvent], None]]]], Callable[[], Any], None]]]]"

我不确定问题是否出在我的代码上,因为返回值类似于['eggs', 'bacon'] ,它是一个list[str] mypy 的这个错误也很奇怪,因为我认为我不应该在这里使用协变。 关于可能是什么问题的任何提示?

我认为问题在于 mypy 关于checkboxlist_dialog function 的信息很少,当然也不知道它的返回类型可以从value参数中找出。

你可能不得不写:

from typing import cast

results = cast(list[string], checkboxlist_dialog(....))

它告诉 mypy 你知道你在做什么,并且返回类型实际上是一个list[string] ,不管它怎么想。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM