我有一个运行 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)]
。
我确信该值将是一个 str。
在这种情况下,请将您的值转换为
str
,以便 mypy 知道。
因此我想强制返回类型为 List[Optional[str]]。
Optional[str]
的意思是None | str
。如果您实际上指的是零个或多个字符串的列表,那么 List[str]
就足够了。