如何让函数遍历股票列表时遇错误仍继续执行剩余元素?
股票筛选器异常处理改造方案
需求说明
开发技术分析股票筛选器时,遍历股票列表的filter_technical函数遇到错误股票代码(如J&KBANK,TradingView正确代码为J_KBANK)或数据获取异常(连接超时、无数据)时,会直接终止运行。需要改造函数,实现:
- 单个股票处理失败时,不中断整个循环,继续处理剩余股票
- 按规则打印提示:
- 符合买入条件:
Buy AXISBANK - 不符合买入条件:
Don't Buy MAHABANK - 数据获取失败:
J&KBANK data does not exist
- 符合买入条件:
改造后代码示例
from tvDatafeed import TvDatafeed, Interval def filter_technical(stock_list): tv = TvDatafeed() # 初始化tvDatafeed客户端 for stock in stock_list: try: # 尝试获取股票历史数据,可根据需求调整交易所、时间周期、数据量 df = tv.get_hist(symbol=stock, exchange='NSE', interval=Interval.in_daily, n_bars=100) # 替换为你的技术分析判断逻辑 if df is not None and not df.empty: # 示例:判断最新收盘价是否高于5日均线 df['MA5'] = df['close'].rolling(5).mean() if df['close'].iloc[-1] > df['MA5'].iloc[-1]: print(f'Buy {stock}') else: print(f"Don't Buy {stock}") else: print(f'{stock} data does not exist') except Exception as e: # 捕获连接超时、无数据等所有异常 print(f'{stock} data does not exist') # 调试时可开启:打印错误详情 # print(f"错误信息:{str(e)}") # 测试用例 stock_list = ['AXISBANK', 'MAHABANK', 'J&KBANK', 'J_KBANK'] filter_technical(stock_list)
关键改造点
- 单股票逻辑包裹try/except:把单只股票的数据获取、分析逻辑放在
try块内,确保单只股票的错误不会中断整个遍历循环 - 异常兜底处理:
except块捕获所有可能的异常(连接超时、无数据等),直接输出对应股票的数据异常提示 - 空数据额外判断:即使
get_hist未抛出异常,也可能返回空DataFrame,需额外判断避免后续分析报错
内容的提问来源于stack exchange,提问作者Sandeep Pai
相关产品推荐
相关产品推荐

