返回两个不同元组之一的 Python 类型提示

问题描述 投票:0回答:1

我正在使用返回单个元组的遗留代码,但更改后将返回原始元组,或具有附加值的另一个元组。基本上是这样的:

1  #!/usr/bin/python
2  from typing import Union
3
4  def func(x):
5      # type: (bool) -> Union[tuple[str, int], tuple[str, str, int]]
6      if x:
7          return "one", "two", 0
8      return "one", 0
9
10  one, two = func(False)
11  print(f"{one} {two}")
12  one, two, three = func(True)
13  print(f"{one} {two} {three}")

代码按预期工作:

$ ./tt.py
one 0
one two 0

但是当我在上面运行 mypy 时,我得到:

$ mypy tt.py
tt.py:10: error: Too many values to unpack (2 expected, 3 provided)  [misc]
tt.py:11: error: Need more than 2 values to unpack (3 expected)  [misc]
Found 2 errors in 1 file (checked 1 source file)

我是否遗漏了什么,或者这是 mypy 的问题吗?

python python-3.x static-typing
1个回答
0
投票

Mypy 会给出错误,因为该函数可以返回两个或三个项目。如果输入是

True
,Mypy 不会推断它将是三个项目。

您可能正在寻找重载。这样,您可以输入,如果输入是

True
,则输出将是包含三个项目的元组;如果输入是
False
,则输出将是包含两个项目的元组。有关重载的更多信息,请参阅 https://docs.python.org/3/library/typing.html#overload

© www.soinside.com 2019 - 2024. All rights reserved.