{"record":{"id":"43d5d82e608ff5f2","repo":"sansan0/TrendRadar","slug":"invalid-parameter-43d5d8","errorCode":"INVALID_PARAMETER","errorMessage":"日期查询字符串不能为空","messagePattern":"日期查询字符串不能为空","errorType":"error_code","errorClass":"InvalidParameterError","httpStatus":null,"severity":"error","filePath":"mcp_server/utils/date_parser.py","lineNumber":123,"sourceCode":"\n        Returns:\n            datetime对象\n\n        Raises:\n            InvalidParameterError: 日期格式无法识别\n\n        Examples:\n            >>> DateParser.parse_date_query(\"今天\")\n            datetime(2025, 10, 11)\n            >>> DateParser.parse_date_query(\"昨天\")\n            datetime(2025, 10, 10)\n            >>> DateParser.parse_date_query(\"3天前\")\n            datetime(2025, 10, 8)\n            >>> DateParser.parse_date_query(\"2025-10-10\")\n            datetime(2025, 10, 10)\n        \"\"\"\n        if not date_query or not isinstance(date_query, str):\n            raise InvalidParameterError(\n                \"日期查询字符串不能为空\",\n                suggestion=\"请提供有效的日期查询，如：今天、昨天、2025-10-10\"\n            )\n\n        date_query = date_query.strip().lower()\n\n        # 1. 尝试解析中文常用相对日期\n        if date_query in DateParser.CN_DATE_MAPPING:\n            days_ago = DateParser.CN_DATE_MAPPING[date_query]\n            return datetime.now() - timedelta(days=days_ago)\n\n        # 2. 尝试解析英文常用相对日期\n        if date_query in DateParser.EN_DATE_MAPPING:\n            days_ago = DateParser.EN_DATE_MAPPING[date_query]\n            return datetime.now() - timedelta(days=days_ago)\n\n        # 3. 尝试解析 \"N天前\" 或 \"N days ago\"\n        cn_days_ago_match = re.match(r'(\\d+)\\s*天前', date_query)","sourceCodeStart":105,"sourceCodeEnd":141,"githubUrl":"https://github.com/sansan0/TrendRadar/blob/8ee26026ba6c11dec41a95fb3895a7162876caa1/mcp_server/utils/date_parser.py#L105-L141","documentation":"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.","triggerScenarios":"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.","commonSituations":"Optional date parameters forwarded without defaults; LLM tool calls omitting the date argument; callers assuming the parser accepts date objects.","solutions":["Pass a non-empty string such as \"今天\", \"昨天\", \"3天前\", or \"2025-10-10\"","Default unset date parameters at the call site before invoking the parser","Convert date/datetime objects to ISO strings first if your value is not text"],"exampleFix":"# before\nDateParser.parse_date_query(date_query=user_input.get(\"date\"))  # may be None\n\n# after\nDateParser.parse_date_query(date_query=user_input.get(\"date\") or \"今天\")","handlingStrategy":"type-guard","validationCode":"if not isinstance(date_query, str) or not date_query.strip():\n    date_query = \"今天\"  # or raise your own descriptive error","typeGuard":"def is_date_query_string(v) -> bool:\n    return isinstance(v, str) and len(v.strip()) > 0","tryCatchPattern":"try:\n    d = DateParser.parse_date_query(q)\nexcept InvalidParameterError as e:\n    if \"不能为空\" in str(e):\n        d = datetime.now()\n    else:\n        raise","preventionTips":["Default optional date params at your boundary (or \"今天\")","Convert date objects to ISO strings before calling","Mark the parameter required in tool schemas"],"tags":["date","validation","utils"],"backgroundTag":null,"analyzedSha":"8ee26026ba6c11dec41a95fb3895a7162876caa1","analyzedAt":"2026-08-15T01:42:18.084Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}