You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用timedelta扩展datetime时mypy报类型不兼容错误的解决方法

解决mypy类型不匹配问题

错误原因

你遇到的mypy错误是因为self.token_exp初始被赋值为int类型的0,但后续在token_expiration方法中又给它赋值datetime类型的对象,类型不一致导致静态检查失败。

解决方案

有两种可行的修正方式:

方式一:显式标注可选类型

如果需要token_exp初始处于未设置状态,可以用Optional[datetime]标注类型,初始值设为None:

from datetime import datetime, timedelta
from typing import Optional

class TokenExp:
    LIFETIME = 60

    def __init__(self, lifetime_in_minutes: int = LIFETIME) -> None:
        self.lifetime = timedelta(minutes=lifetime_in_minutes)
        self.token_exp: Optional[datetime] = None  # 明确类型为可选datetime

    def token_expiration(self) -> datetime:
        now = datetime.utcnow()
        self.token_exp = now + self.lifetime
        return self.token_exp

方式二:初始化时直接设置datetime类型值

如果希望token_exp从实例创建时就有有效值,可以在__init__中直接计算初始过期时间:

from datetime import datetime, timedelta

class TokenExp:
    LIFETIME = 60

    def __init__(self, lifetime_in_minutes: int = LIFETIME) -> None:
        self.lifetime = timedelta(minutes=lifetime_in_minutes)
        self.token_exp = datetime.utcnow() + self.lifetime  # 初始即为datetime类型

    def token_expiration(self) -> datetime:
        self.token_exp = datetime.utcnow() + self.lifetime
        return self.token_exp

这两种方式都能让mypy识别到self.token_exp的正确类型,消除类型不匹配的错误。

内容的提问来源于stack exchange,提问作者Italo Lemos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:53:12