【问题标题】:mypy: Value of type "Optional[Mapping[Any, Any]]" is not indexablemypy:“Optional[Mapping[Any, Any]]”类型的值不可索引
【发布时间】:2021-06-14 11:24:47
【问题描述】:

为什么mypydatabases 库的fetch_one 方法返回的值不可索引?在这种情况下我应该怎么做才能解决这个错误?

async def get_reaction_by_name(name: str, user_id: str) -> Optional[Mapping[Any, Any]]:
    query = reactions.select().where(
        (reactions.c.name == name) & (reactions.c.user_id == user_id)
    )
    return await database.fetch_one(query)

...

reaction = await get_reaction_by_name(name=name, user_id=user_id)
reaction["name"]

# mypy: Value of type "Optional[Mapping[Any, Any]]" is not indexable

【问题讨论】:

  • database.fetch_one函数的签名是什么?
  • 也因为它是Optional mypy 说您可能应该检查返回的值是否不是None,然后再将其视为Mapping
  • 类似if reaction is not None: reaction["name"]
  • 检查None 有帮助!请添加答案,我会接受。

标签: python python-3.x type-hinting mypy


【解决方案1】:

mypy 告诉我们的是,由于函数在将其结果视为 ...(给定 sn-p 中的 Mapping[Any, Any])之前返回 Optional[...],我们应该检查它是否不是 None 之类的

reaction = await get_reaction_by_name(name=name, user_id=user_id)
if reaction is not None:
    reaction["name"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-05
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2021-12-31
    • 1970-01-01
    • 2020-08-29
    相关资源
    最近更新 更多