sansan0/TrendRadar · error · InvalidParameterError

INVALID_PARAMETER

INVALID_PARAMETER

Error message

日期查询字符串不能为空

What it means

Thrown by DateParser.parse_date_query when the input is falsy (None, "") or not a str instance. It is the entry guard of the parser — no pattern matching is attempted on bad input.

Source

Thrown at mcp_server/utils/date_parser.py:123

        Returns:
            datetime对象

        Raises:
            InvalidParameterError: 日期格式无法识别

        Examples:
            >>> DateParser.parse_date_query("今天")
            datetime(2025, 10, 11)
            >>> DateParser.parse_date_query("昨天")
            datetime(2025, 10, 10)
            >>> DateParser.parse_date_query("3天前")
            datetime(2025, 10, 8)
            >>> DateParser.parse_date_query("2025-10-10")
            datetime(2025, 10, 10)
        """
        if not date_query or not isinstance(date_query, str):
            raise InvalidParameterError(
                "日期查询字符串不能为空",
                suggestion="请提供有效的日期查询,如:今天、昨天、2025-10-10"
            )

        date_query = date_query.strip().lower()

        # 1. 尝试解析中文常用相对日期
        if date_query in DateParser.CN_DATE_MAPPING:
            days_ago = DateParser.CN_DATE_MAPPING[date_query]
            return datetime.now() - timedelta(days=days_ago)

        # 2. 尝试解析英文常用相对日期
        if date_query in DateParser.EN_DATE_MAPPING:
            days_ago = DateParser.EN_DATE_MAPPING[date_query]
            return datetime.now() - timedelta(days=days_ago)

        # 3. 尝试解析 "N天前" 或 "N days ago"
        cn_days_ago_match = re.match(r'(\d+)\s*天前', date_query)

View on GitHub (pinned to 8ee26026ba)

Solutions

  1. Pass a non-empty string such as "今天", "昨天", "3天前", or "2025-10-10"
  2. Default unset date parameters at the call site before invoking the parser
  3. Convert date/datetime objects to ISO strings first if your value is not text

Example fix

# before
DateParser.parse_date_query(date_query=user_input.get("date"))  # may be None

# after
DateParser.parse_date_query(date_query=user_input.get("date") or "今天")
Defensive patterns

Strategy: type-guard

Validate before calling

if not isinstance(date_query, str) or not date_query.strip():
    date_query = "今天"  # or raise your own descriptive error

Type guard

def is_date_query_string(v) -> bool:
    return isinstance(v, str) and len(v.strip()) > 0

Try / catch

try:
    d = DateParser.parse_date_query(q)
except InvalidParameterError as e:
    if "不能为空" in str(e):
        d = datetime.now()
    else:
        raise

Prevention

When it happens

Trigger: Calling parse_date_query(None), parse_date_query(""), or passing a datetime.date/dict/int instead of a string; upstream code passing an unset optional parameter through.

Common situations: Optional date parameters forwarded without defaults; LLM tool calls omitting the date argument; callers assuming the parser accepts date objects.

Related errors


AI-assisted analysis of sansan0/TrendRadar@8ee26026ba (2026-08-15). Data as JSON: /api/errors/43d5d82e608ff5f2. Report an issue: GitHub.