Python调用yfinance报错未被try/except捕获且栈追踪无自定义脚本问题
问题解答
1. 栈回溯未提及P2_small.py的原因
yfinance默认依赖multitasking库开启子线程异步执行数据拉取任务,报错第一行已经明确标注Exception in thread Thread-1225,说明异常发生在第三方库创建的子线程中。子线程的调用栈从线程初始化入口(也就是threading库的run方法)开始记录,不会包含你主线程中P2_small.py的代码路径,所以栈回溯全程只显示库文件的调用逻辑。
2. 异常未被try/except捕获的原因
Python的异常是线程隔离的,你写的try/except块包裹的是主线程中startInfiniteLoop函数的逻辑,只能捕获主线程运行时抛出的异常。而本次报错发生在yfinance新开的子线程中,子线程的异常无法跨线程传递到主线程的异常捕获块,所以你写的except分支根本接收不到这个错误。
修复方案
调用yf.download时添加threads=False参数,强制关闭多线程异步逻辑,让数据拉取在主线程同步执行,这样抛出的网络异常就能被你写的try/except捕获:
df = yf.download(tickers="RDSB.L", period="1y", interval="1d", auto_adjust=True, prepost=False, threads=False)
内容的提问来源于stack exchange,提问作者mkemper
相关产品推荐
相关产品推荐

