如何为可以返回多个值的函数设置类型提示?

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

我有一个运行 mysql select 查询并返回值列表的函数。然而我正在努力处理类型提示。

功能:

def my_function(
    self,
    param1: List[str],
    param2: date,
    param3: int,
    param4: List[str],
    param5: List[int],
    param6: List[str],
    param7: int,
) -> List[Optional[str]]:
    """#TODO: Write docstring."""
    cnx = self.mysql
    cursor = cnx.cursor()

    query = files(sql).joinpath("ready_batches.sql").read_text()

    param1_str = ",".join([f"'{lob}'" for lob in param1])
    param4_str = ",".join([f"'{clm_type}'" for clm_type in param4])
    param5_str = ",".join([f"{client_id}" for client_id in param5])
    param6_str = ",".join([f"{module_id}" for module_id in param6])

    with cnx, cursor:
        cursor.execute(
            query,
            {
                "lob": param1_str,
                "clm_type": param4_str,
                "client_id": param5_str,
                "param7": param7,
                "module_id": param6_str,
                "param3": param3,
                "param2": param2,
            },
        )

        result = cursor.fetchall()
        return [value for value, _ in result]

但是 mypy 在返回列表值中给了我以下问题:

列表理解具有不兼容的类型 List[Union[float, int, 小数、str、字节、日期、timedelta、Set[str]、None、Any]];预期的 列表[str]

我确信

value
将是
str
。因此我想强制返回类型为
List[Optional(str)]

python mypy type-hinting
1个回答
0
投票

我确信该值将是一个 str。

在这种情况下,请将您的值转换为

str
,以便 mypy 知道。

因此我想强制返回类型为 List[Optional[str]]。

Optional[str]
的意思是
None | str
。如果您实际上指的是零个或多个字符串的列表,那么
List[str]
就足够了。

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