{"record":{"id":"3a4c4781c94af667","repo":"sansan0/TrendRadar","slug":"error","errorCode":null,"errorMessage":"日期表达式不能为空","messagePattern":"日期表达式不能为空","errorType":"validation","errorClass":"InvalidParameterError","httpStatus":null,"severity":"error","filePath":"mcp_server/utils/date_parser.py","lineNumber":371,"sourceCode":"                    \"start\": \"2025-11-18\",\n                    \"end\": \"2025-11-24\"\n                },\n                \"current_date\": \"2025-11-26\",\n                \"description\": \"本周（周一到周日）\"\n            }\n\n        Raises:\n            InvalidParameterError: 无法识别的日期表达式\n\n        Examples:\n            >>> DateParser.resolve_date_range_expression(\"本周\")\n            {\"success\": True, \"date_range\": {\"start\": \"2025-11-18\", \"end\": \"2025-11-24\"}, ...}\n\n            >>> DateParser.resolve_date_range_expression(\"最近7天\")\n            {\"success\": True, \"date_range\": {\"start\": \"2025-11-20\", \"end\": \"2025-11-26\"}, ...}\n        \"\"\"\n        if not expression or not isinstance(expression, str):\n            raise InvalidParameterError(\n                \"日期表达式不能为空\",\n                suggestion=\"请提供有效的日期表达式，如：本周、最近7天、last week\"\n            )\n\n        expression_lower = expression.strip().lower()\n        today = datetime.now()\n        today_str = today.strftime(\"%Y-%m-%d\")\n\n        # 1. 尝试匹配预定义表达式\n        normalized = DateParser.RANGE_EXPRESSIONS.get(expression_lower)\n\n        # 2. 尝试匹配动态 \"最近N天\" / \"last N days\" 模式\n        if not normalized:\n            # 中文: 最近N天\n            cn_match = re.match(r'最近(\\d+)天', expression_lower)\n            if cn_match:\n                days = int(cn_match.group(1))\n                normalized = f\"last_{days}_days\"","sourceCodeStart":353,"sourceCodeEnd":389,"githubUrl":"https://github.com/sansan0/TrendRadar/blob/8ee26026ba6c11dec41a95fb3895a7162876caa1/mcp_server/utils/date_parser.py#L353-L389","documentation":"Entry guard of DateParser.resolve_date_range_expression, the MCP-side helper that turns natural-language range expressions (本周, 最近7天, last week) into {start, end} dicts. It rejects falsy or non-string input before consulting the RANGE_EXPRESSIONS table or the dynamic \"最近N天\"/\"last N days\" patterns.","triggerScenarios":"Calling resolve_date_range_expression(None), \"\", or a non-string (dict/date/int); tool wiring that forwards an absent optional expression parameter.","commonSituations":"MCP tool schemas marking date_expression optional while the implementation requires it; LLM calls omitting the argument; passing an already-resolved date_range dict where an expression string was expected.","solutions":["Pass a non-empty expression string: 本周, 上周, 最近7天, last week, this month, etc.","Default missing parameters to a sensible expression (e.g. \"最近7天\") at the call site","If you already have concrete dates, bypass this helper and supply the date range directly to the consuming tool"],"exampleFix":"# before\nDateParser.resolve_date_range_expression(params.get(\"date_expression\"))  # may be None\n\n# after\nDateParser.resolve_date_range_expression(params.get(\"date_expression\") or \"最近7天\")","handlingStrategy":"type-guard","validationCode":"if not isinstance(expression, str) or not expression.strip():\n    expression = \"最近7天\"  # or raise a clear local error","typeGuard":"def is_range_expression(v) -> bool:\n    return isinstance(v, str) and len(v.strip()) > 0","tryCatchPattern":"try:\n    rng = DateParser.resolve_date_range_expression(expr)\nexcept InvalidParameterError as e:\n    if \"不能为空\" in str(e):\n        rng = DateParser.resolve_date_range_expression(\"最近7天\")\n    else:\n        raise","preventionTips":["Mark date_expression required in tool schemas, or default it explicitly","Do not pass pre-resolved date dicts where an expression string is expected","Keep a short list of known-good expressions (本周, 上周, 最近N天) for agents"],"tags":["date","validation","date-range","utils"],"backgroundTag":null,"analyzedSha":"8ee26026ba6c11dec41a95fb3895a7162876caa1","analyzedAt":"2026-08-15T01:42:18.084Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}