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

使用Peewee时,如何解决查询无结果的返回类型不匹配问题?

解决Peewee查询返回None的类型标注问题

问题原因

你的函数返回类型标注为GuildMember,但实际在无匹配条目时返回了None,静态类型检查工具会因为类型不匹配抛出错误。

方案一:修正返回类型标注(推荐)

明确告知类型检查工具函数可能返回GuildMember或None,可根据Python版本选择写法:

Python 3.8-3.9 写法

from typing import Optional
import peewee
from your_module import GuildMember  # 替换为你的模型导入路径

@staticmethod
def fetch_guild_member(guild_id: int, user_id: int) -> Optional[GuildMember]:
    try:
        return GuildMember.get(GuildMember.guild_id == guild_id, GuildMember.user_id == user_id)
    except peewee.DoesNotExist:
        return None

Python 3.10+ 写法

支持原生联合类型语法,无需导入Optional:

import peewee
from your_module import GuildMember  # 替换为你的模型导入路径

@staticmethod
def fetch_guild_member(guild_id: int, user_id: int) -> GuildMember | None:
    try:
        return GuildMember.get(GuildMember.guild_id == guild_id, GuildMember.user_id == user_id)
    except peewee.DoesNotExist:
        return None

方案二:返回空的GuildMember实例

如果确实需要返回GuildMember类型的对象而非None,可以创建一个未保存的空实例并填充默认值:

import peewee
from your_module import GuildMember  # 替换为你的模型导入路径

@staticmethod
def fetch_guild_member(guild_id: int, user_id: int) -> GuildMember:
    try:
        return GuildMember.get(GuildMember.guild_id == guild_id, GuildMember.user_id == user_id)
    except peewee.DoesNotExist:
        # 根据模型字段设置默认值,避免字段缺失报错
        return GuildMember(
            guild_id=guild_id,
            user_id=user_id,
            nickname="",
            join_timestamp=0
            # 其他字段按需补充默认值
        )

注意:这种方式返回的是未持久化到数据库的实例,调用save()方法会将其插入数据库,使用时需注意区分真实数据和空实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:45:07