Hello,大家好,我们准备收集并整理常见问题,并在此做出解释。 大家有问题,可以在下面跟帖,我们答复并整理。 感谢您的参与。
温馨提示:
大多数的异常或者报错,大家复制下报错代码的最后一行,在网上搜下原因或者解决方法就可以解决了;
回测或者模拟交易中的报错,可以在报错代码中找到“user_code.py”,然后再看下对应的报错在您代码中哪行,重点关注下最后一行报错提示,也可以直接将最后一行报错复制到网上搜下解决方法;
结合上面这两个方法,您可以解决大多数的问题,若还有问题的话,欢迎在我们的社区发帖提问,请详细描述下问题及报错截图。
常见bug怎么调试
可以试试官网社区帖中调试方法【有用功】教你如何调试程序(Debug),
Python标准异常
(1)BaseException 所有异常的基类
(2)SystemExit 解释器请求退出
(3)KeyboardInterrupt 用户中断执行(通常是输入^C)
(4)Exception 常规错误的基类
(5)StopIteration 迭代器没有更多的值
(6)GeneratorExit 生成器(generator)发生异常来通知退出
(7)StandardError 所有的内建标准异常的基类
(8)ArithmeticError 所有数值计算错误的基类
(9)FloatingPointError 浮点计算错误
(10)OverflowError 数值运算超出最大限制
(11)ZeroDivisionError 除(或取模)零 (所有数据类型)
(12)AssertionError 断言语句失败
(13)AttributeError 对象没有这个属性
(14)EOFError 没有内建输入,到达EOF 标记
(15)EnvironmentError 操作系统错误的基类
(16)IOError 输入/输出操作失败
(17)OSError 操作系统错误
(18)WindowsError 系统调用失败
(19)ImportError 导入模块/对象失败
(20)LookupError 无效数据查询的基类
(21)IndexError 序列中没有此索引(index)
(22)KeyError 映射中没有这个键
(23)MemoryError 内存溢出错误(对于Python 解释器不是致命的)
(24)NameError 未声明/初始化对象 (没有属性)
(25)UnboundLocalError 访问未初始化的本地变量
(26)ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
(27)RuntimeError 一般的运行时错误
(28)NotImplementedError 尚未实现的方法
(29)SyntaxError Python 语法错误
(30)IndentationError 缩进错误
(31)TabError Tab 和空格混用
(32)SystemError 一般的解释器系统错误
(33)TypeError 对类型无效的操作
(34)ValueError 传入无效的参数
(35)UnicodeError Unicode 相关的错误
(36)UnicodeDecodeError Unicode 解码时的错误
(36)UnicodeEncodeError Unicode 编码时错误
(37)UnicodeTranslateError Unicode 转换时错误
(38)Warning 警告的基类
(39)DeprecationWarning 关于被弃用的特征的警告
(40)FutureWarning 关于构造将来语义会有改变的警告
(41)OverflowWarning 旧的关于自动提升为长整型(long)的警告
(42)PendingDeprecationWarning 关于特性将会被废弃的警告
(43)RuntimeWarning 可疑的运行时行为(runtime beh*ior)的警告
(44)SyntaxWarning 可疑的语法的警告
(45)UserWarning 用户代码生成的警告
IndentationError: unexpected indent
缩进错误
SecurityNotExist,Exception:找不到标的xxx
输入的股票代码不对,或者后缀不对
NameError: global name 'xxx' is not defined
原因:(1)局部变量写错了;(2)未在初始化中定义全局变量(g.*);
解决方法:查看报错user_code.py中报错信息的行数,有没有写错或者在全局变量中定义
xxx在position中不存在,为了保持兼容...
为什么我的代码运行没结果
(1)您要运行策略,点击编译运行或者运行回测,在研究中可以通过点击工具栏中的运行按钮运行;(2)您的程序要有输出内容,例如使用log.info或者print输出。
OperationalError: (_mysql_exceptions.OperationalError) (2003, "Can't connect to MySQL server on '10.45.145.137' (110)")
原因:连接MySQL数据库失败
解决方法:您再次运行下,一次不要查询大量的数据。
ImportError: 导入'xxx'模块失败: read_file xxx.so: 文件'/opt/research-files/xxx/xxx/xxx.so'不存在
WARNING xxx joblib will operate in serial mode warings.warn xxx
是因为加大了安全粒度,无法使用多进程/多线程模式,只能使用单线程
(1)为了安全,请不要使用多线程或者多线程;(2)如果没使用的话,请忽略,这个只是警告,不影响程序的正常运行。
TimeoutError:function 'market_open' runs more than 1800 seconds
(1)我们引擎目前是限制1800秒内跑完,超过就关闭了;
(2)您可以结合性能分析enable_profile优化下策略,性能分析API的链接如下:
(3)可以将运行时间长的函数*到不同时间段运行;
(4)还可以通过gc处理,具体方法参考下面的帖子:
XXX.so不存在
IOEeeor:[Errno 2] No such file or directory: u'*\JoinQUant-Desktop\USERDATA\.joinquant\bundle\stockId\*\meta
客户端没有下载数据
IndexError: list index out of range,IndexError:index out of bounds
原因:获取List中不存在的索引的值
解决方法:首先找到user_code.py中错误所在行;在程序中加入判断list的长度。
AttributeError:'DataFrame' object has no attribute 'sort',AttributeError: 'DataFrame' object has no attribute 'sort_value'
dataframe类型没有sort_value这个方法,dataframe类型没有sort_value这个方法
原因:不同版本Pandas的排序方法不同。
解决方法:您可以查看下您使用环境中Pandas的版本,并使用对应的排序方法。具体使用方法请参考Pandas的教程。
一般的,早期版本的排序方法是sort,新版本的排序方法为sort_values。
ascending=False为降序排列,即最大值在最前面;默认为升序排列
早期版本的排序
year_pct_sum_sort = years_pct_sum[year].order(ascending=False)
data.sort('change_pct', ascending=False)
新版本的排序
year_pct_sum_sort = years_pct_sum[year].sort_values(ascending=False)
data.sort_values(by='date')
提示pandas没有stats方法
一般报错内容如下
from pandas.stats.api import ols ModuleNotFoundError: No module named 'pandas.stats'
产生的原因:在pandas0.18前的版本有stats方法,之后版本取消了这个方法。
解决方法:
(1)使用statsmodels的ols方法,具体使用方法请查询statsmodels模块的使用方法;
(2)聚宽官网的python2回测环境中pandas目前是0.16版的,可以正常使用;
(3)自定义客户端pandas的版本,不过不推荐,pandas是个很重要的Python库,如果降低了pandas的版本,客户端可能打不开。
pandas关于Panel将在后期版本取消的提示
DeprecationWarning: Panel is deprecated and will be removed in a future version. The recommended way to represent these types of 3-dimensional data are with a MultiIndex on a DataFrame, via the Panel.to_frame() method Alternatively, you can use the xarray package http://xarray.pydata.org/en/stable/. Pandas provides a `.to_xarray()` method to help automate this conversion.
可以忽略这个提示,不影响策略的正常运行;也可以添加下面的代码取消提示。
import warnings warnings.filterwarnings("ignore")
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...
移动端课程