{"record":{"id":"c1b47a964540b35c","repo":"hsliuping/TradingAgents-CN","slug":"symbol-mongodb-akshare-tus","errorCode":null,"errorMessage":"无法获取股票 {symbol} 的财务数据。已尝试所有数据源（MongoDB、AKShare、Tushare）均失败。","messagePattern":"无法获取股票 (.+?) 的财务数据。已尝试所有数据源（MongoDB、AKShare、Tushare）均失败。","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"tradingagents/dataflows/optimized_china_data.py","lineNumber":842,"sourceCode":"    def _estimate_financial_metrics(self, symbol: str, current_price: str) -> dict:\n        \"\"\"获取真实财务指标（从 MongoDB、AKShare、Tushare 获取，失败则抛出异常）\"\"\"\n\n        # 提取价格数值\n        try:\n            price_value = float(current_price.replace('¥', '').replace(',', ''))\n        except:\n            price_value = 10.0  # 默认值\n\n        # 尝试获取真实财务数据\n        real_metrics = self._get_real_financial_metrics(symbol, price_value)\n        if real_metrics:\n            logger.info(f\"✅ 使用真实财务数据: {symbol}\")\n            return real_metrics\n\n        # 如果无法获取真实数据，抛出异常\n        error_msg = f\"无法获取股票 {symbol} 的财务数据。已尝试所有数据源（MongoDB、AKShare、Tushare）均失败。\"\n        logger.error(f\"❌ {error_msg}\")\n        raise ValueError(error_msg)\n\n    def _get_real_financial_metrics(self, symbol: str, price_value: float) -> dict:\n        \"\"\"获取真实财务指标 - 优先使用数据库缓存，再使用API\"\"\"\n        try:\n            # 🔥 优先从 market_quotes 获取实时股价，替换传入的 price_value\n            from tradingagents.config.database_manager import get_database_manager\n            db_manager = get_database_manager()\n            db_client = None\n\n            if db_manager.is_mongodb_available():\n                try:\n                    db_client = db_manager.get_mongodb_client()\n                    db = db_client['tradingagents']\n\n                    # 标准化股票代码为6位\n                    code6 = symbol.replace('.SH', '').replace('.SZ', '').zfill(6)\n\n                    # 从 market_quotes 获取实时股价","sourceCodeStart":824,"sourceCodeEnd":860,"githubUrl":"https://github.com/hsliuping/TradingAgents-CN/blob/74783e8817d6cf6de29867880631cc555153f36b/tradingagents/dataflows/optimized_china_data.py#L824-L860","documentation":"Raised by _estimate_financial_metrics in optimized_china_data when real financial metrics could not be retrieved from any backend (MongoDB cache, AKShare, Tushare). The module deliberately refuses to fabricate estimates and surfaces a ValueError naming the symbol.","triggerScenarios":"Generating a fundamentals report (_generate_fundamentals_report) for a symbol with no data in MongoDB, an AKShare call that fails/times out, and no valid Tushare token — all three failing in sequence.","commonSituations":"Obscure/delisted A-share tickers, AKShare network issues, Tushare token missing or rate-limited, MongoDB cache empty for that symbol.","solutions":["Verify the symbol is a valid A-share code (e.g. 600519.SH / 000001.SZ format expected by the module)","Check connectivity and try the AKShare fetch standalone; fix network/proxy","Configure Tushare credentials so the last fallback works","Populate the MongoDB cache for the symbol once data is available"],"exampleFix":"# before\nreport = _generate_fundamentals_report('XXXXXX', '2025-01-01')\n# after\nreport = _generate_fundamentals_report('600519.SH', '2025-01-01')","handlingStrategy":"fallback","validationCode":"from tradingagents.config.database_manager import get_database_manager\ntry:\n    get_database_manager()\nexcept Exception:\n    raise SystemExit('Backends unavailable; fix MongoDB/AKShare/Tushare first')","typeGuard":null,"tryCatchPattern":"try:\n    report = _generate_fundamentals_report(symbol, date)\nexcept ValueError as e:\n    if '财务数据' in str(e):\n        report = cached_report(symbol) or 'Financial data unavailable'\n    else:\n        raise","preventionTips":["Validate symbol format (XXXXXX.SH/.SZ) before requesting fundamentals","Keep at least two backends healthy (AKShare network + Tushare token)","Cache successful fundamentals fetches in MongoDB to survive API outages"],"tags":["python","akshare","tushare","mongodb","financial-data"],"backgroundTag":"data-source-unavailable","analyzedSha":"74783e8817d6cf6de29867880631cc555153f36b","analyzedAt":"2026-08-28T11:39:07.729Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}