Mypy:键入要加在一起的两个 int 或 str 列表
Mypy: Typing two list of int or str to be added together
我有一个函数可以合并两个 int 或 str 列表。
不能出现两个列表类型不同的情况。
由以下代码定义:
AddableList = ...
def add_arrays(array: AddableList, array2: AddableList) -> AddableList:
if len(array) != len(array2):
raise ValueError
return [a + b for a, b in zip(array, array2)]
键入 AddableList
时,使用 List[int]
mypy: Success: no issues
键入 AddableList
时,使用 List[str]
mypy: Success: no issues
但是mypy会return下面的错误
error: Unsupported operand types for + ("int" and "str")
error: Unsupported operand types for + ("str" and "int")
note: Both left and right operands are unions
Found 2 errors in 1 file (checked 333 source files)
当正确使用输入时,列表 AddableList = List[Union[int, str]]
最后,当尝试将 AddableList
键入 Union[List[int], List[str]]
时,mypy 错误为:
error: Unsupported left operand type for + ("object")
我应该使用什么类型来解决这个问题?
使用将解析为一种类型或另一种类型的 TypeVar
(但不能在同一上下文中同时解析两种类型):
from typing import List, TypeVar
Addable = TypeVar("Addable", str, int)
def add_arrays(array: List[Addable], array2: List[Addable]) -> List[Addable]:
if len(array) != len(array2):
raise ValueError
return [a + b for a, b in zip(array, array2)]
reveal_type(add_arrays([1, 2, 3], [2, 3, 4])) # List[int]
reveal_type(add_arrays(["a", "b"], ["c", "d"])) # List[str]
reveal_type(add_arrays([1, 2, 3], ["a", "b", "c"])) # error
最后一行抛出错误,因为没有 Addable
可以解析为的类型:
test.py:14: error: Cannot infer type argument 1 of "add_arrays"
我有一个函数可以合并两个 int 或 str 列表。 不能出现两个列表类型不同的情况。
由以下代码定义:
AddableList = ...
def add_arrays(array: AddableList, array2: AddableList) -> AddableList:
if len(array) != len(array2):
raise ValueError
return [a + b for a, b in zip(array, array2)]
键入 AddableList
时,使用 List[int]
mypy: Success: no issues
键入 AddableList
时,使用 List[str]
mypy: Success: no issues
但是mypy会return下面的错误
error: Unsupported operand types for + ("int" and "str")
error: Unsupported operand types for + ("str" and "int")
note: Both left and right operands are unions
Found 2 errors in 1 file (checked 333 source files)
当正确使用输入时,列表 AddableList = List[Union[int, str]]
最后,当尝试将 AddableList
键入 Union[List[int], List[str]]
时,mypy 错误为:
error: Unsupported left operand type for + ("object")
我应该使用什么类型来解决这个问题?
使用将解析为一种类型或另一种类型的 TypeVar
(但不能在同一上下文中同时解析两种类型):
from typing import List, TypeVar
Addable = TypeVar("Addable", str, int)
def add_arrays(array: List[Addable], array2: List[Addable]) -> List[Addable]:
if len(array) != len(array2):
raise ValueError
return [a + b for a, b in zip(array, array2)]
reveal_type(add_arrays([1, 2, 3], [2, 3, 4])) # List[int]
reveal_type(add_arrays(["a", "b"], ["c", "d"])) # List[str]
reveal_type(add_arrays([1, 2, 3], ["a", "b", "c"])) # error
最后一行抛出错误,因为没有 Addable
可以解析为的类型:
test.py:14: error: Cannot infer type argument 1 of "add_arrays"