# 主力选股批量分析修复说明 ## 修复日期 2025-10-22 ## 修复问题 ### 1. JSON序列化失败 **问题描述**: 批量分析结果保存到历史记录时失败,错误信息:`Object of type DataFrame is not JSON serializable` **原因**: 分析结果中包含Pandas DataFrame和Series对象,无法直接序列化为JSON **解决方案**: - 在 `main_force_batch_db.py` 中添加 `_clean_results_for_json()` 方法 - 递归清理所有不可序列化的对象: - DataFrame → `to_dict('records')` - Series → `to_dict()` - 其他对象 → `str(value)` - 限制DataFrame最大行数为100,避免数据过大 **相关文件**: - `main_force_batch_db.py` (lines 50-102) ### 2. 历史记录显示N/A **问题描述**: 批量分析历史记录中,股票名称和评级显示为N/A **原因**: 字段名不匹配 - 代码中访问: `stock_info.get('股票名称', 'N/A')` - 实际字段名: `stock_info['name']` - 代码中访问: `final_decision.get('investment_rating', 'N/A')` - 实际字段名: `final_decision['rating']` **解决方案**: 修复以下文件中的字段名访问: - `main_force_history_ui.py`: - `股票名称` → `name` - `investment_rating` → `rating` - `investment_advice` → `operation_advice` - `main_force_ui.py`: - `advice` → `operation_advice` **相关文件**: - `main_force_history_ui.py` (lines 109, 110, 126, 130) - `main_force_ui.py` (line 906) ### 3. 详细调试日志 **问题描述**: 难以追踪批量分析和保存过程中的问题 **解决方案**: - 在并行分析中添加详细的进度日志 - 在保存历史记录前添加数据类型检查 - 添加保存耗时统计 - 添加详细的错误堆栈信息 **相关文件**: - `main_force_ui.py` (lines 650-692, 706-753) ## 数据结构参考 ### stock_info 字段 ```python { "symbol": "600519", "name": "贵州茅台", # <-- 正确的字段名 "current_price": "1850.00", "change_percent": "2.5%", "pe_ratio": "30.5", "pb_ratio": "10.2", "market_cap": "2.3万亿", "market": "中国A股", "exchange": "上海/深圳证券交易所" } ``` ### final_decision 字段 ```python { "rating": "买入", # <-- 正确的字段名 "target_price": "2000", "operation_advice": "...", # <-- 正确的字段名 "entry_range": "1800-1850", "take_profit": "2000", "stop_loss": "1750", "holding_period": "3-6个月", "position_size": "中等仓位", "risk_warning": "...", "confidence_level": "8" } ``` ## 测试建议 1. **功能测试**: - 运行10只股票的批量分析 - 检查历史记录是否正确保存 - 验证股票名称和评级正确显示 2. **性能测试**: - 测试大量DataFrame数据的序列化性能 - 验证100行限制是否合理 3. **边界测试**: - 测试包含异常数据的分析结果 - 测试空DataFrame的处理 - 测试None值的处理 ## 相关文档 - [主力选股批量分析功能说明](./主力选股批量分析功能说明.md) - [主力选股批量分析历史记录功能说明](./主力选股批量分析历史记录功能说明.md)