mypy错误:赋值中的类型不兼容(表达式具有类型" List [str]&#34 ;,变量具有类型" str")

时间:2018-05-28 09:11:26

标签: python python-3.x mypy

我有这个非常简单的功能:

import datetime

def create_url(check_in: datetime.date) -> str:
"""take date such as '2018-06-05' and transform to format '06%2F05%2F2018'"""
    _check_in = check_in.strftime("%Y-%m-%d")
    _check_in = _check_in.split("-")
    _check_in = _check_in[1] + "%2F" + _check_in[2] + "%2F" + _check_in[0]

    return f"https://www.website.com/?arrival={_check_in}"

mypy会抛出以下错误: 第6行error:Incompatible types in assignment (expression has type "List[str]", variable has type "str") _check_in = _check_in.split("-")。 我已尝试在第6行重命名_check_in,但这没有任何区别。这个功能很好。

这是预期的行为吗?如何修复错误。

谢谢!

2 个答案:

答案 0 :(得分:2)

在第一行_check_in = check_in.strftime("%Y-%m-%d")中,_check_in是一个字符串(或my str就像我想的那样),然后在_check_in = _check_in.split("-") _check_in中成为一个列表字符串(List[str]),因为mypy已经认为这应该是str,它会抱怨(或者更确切地警告你,因为这不是一个特别好的做法)。

至于你应该如何修复它,只需要适当地重命名变量,或者你可以_check_in = _check_in.split("-") # type: List[str](以及下面的_check_in = _check_in[1] + "%2F" + _check_in[2] + "%2F" + _check_in[0] # type: str行)如果你已经开始使用_check_in作为变量名。

修改

也许你想要这样做

import datetime

def create_url(check_in: datetime.datetime) -> str:
    return "https://www.website.com/?arrival={0}".format(
        check_in.strftime('%d%%2F%m%%2F%Y'),
    )

答案 1 :(得分:0)

似乎对我有用吗?这是我的代码实现

$