Solution For ImportError Of Backtrader

项目场景:

        通过Backtrader框架对tushare获取的股票数据做回测调用cerebro.plot()时报错:        

        ImportError:cannot import name 'warnings'


问题描述

详细报错信息如下:

Traceback (most recent call last):
  File "D:\Anaconda3\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
  File "D:\Desktop\新建文件夹 (2)\cfc-validation\SimTrade\gui_simtrade.py", line 338, in execOpTradebackDay
    cerebro.plot()
  File "D:\Anaconda3\lib\site-packages\backtrader\cerebro.py", line 974, in plot
    from . import plot
  File "D:\Anaconda3\lib\site-packages\backtrader\plot\__init__.py", line 43, in <module>
    from .plot import Plot, Plot_OldSync
  File "D:\Anaconda3\lib\site-packages\backtrader\plot\plot.py", line 44, in <module>
    from . import locator as loc
  File "D:\Anaconda3\lib\site-packages\backtrader\plot\locator.py", line 35, in <module>
    from matplotlib.dates import (HOURS_PER_DAY, MIN_PER_HOUR, SEC_PER_MIN,
ImportError: cannot import name 'warnings'

原因分析:

认真看这里的报错信息,定位到

D:\Anaconda3\lib\site-packages\backtrader\plot\locator.py
from matplotlib.dates import (HOURS_PER_DAY, MIN_PER_HOUR, SEC_PER_MIN,
                              MONTHS_PER_YEAR, DAYS_PER_WEEK,
                              SEC_PER_HOUR, SEC_PER_DAY,
                              num2date, rrulewrapper, YearLocator,
                              MicrosecondLocator, warnings)

         是这里的warnings不能被引用,查阅相关文档后发现:

  • matplotlib 3.2后的版本不在支持warnings
  • Backtrader所支持的matplotlib版本为3.2.2
  • 我安装的matplotlib是3.4.5
  • 由此可以得出两种解决方案:

解决方案:

1、回退matplotlib版本为3.2.2

pip uninstall matplotlib
pip install matplotlib==3.2.2

2、将locator.py错误定位语句修改为:

from matplotlib.dates import (HOURS_PER_DAY, MIN_PER_HOUR, SEC_PER_MIN,
                              MONTHS_PER_YEAR, DAYS_PER_WEEK,
                              SEC_PER_HOUR, SEC_PER_DAY,
                              num2date, rrulewrapper, YearLocator,
                              MicrosecondLocator)
import warnings

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LeeYotta

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值