请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3353818 新帖:5

聚宽十万个为什么(常见Bug或者警告)

汇市风云榜发表于:5 月 10 日 05:02回复(1)

1 概述

Hello,大家好,我们准备收集并整理常见问题,并在此做出解释。
大家有问题,可以在下面跟帖,我们答复并整理。
感谢您的参与。

温馨提示:

  • 大多数的异常或者报错,大家复制下报错代码的最后一行,在网上搜下原因或者解决方法就可以解决了;

  • 回测或者模拟交易中的报错,可以在报错代码中找到“user_code.py”,然后再看下对应的报错在您代码中哪行,重点关注下最后一行报错提示,也可以直接将最后一行报错复制到网上搜下解决方法;

  • 结合上面这两个方法,您可以解决大多数的问题,若还有问题的话,欢迎在我们的社区发帖提问,请详细描述下问题及报错截图。

报错.png

2 正文

常见bug怎么调试
可以试试官网社区帖中调试方法【有用功】教你如何调试程序(Debug),

2.1 Python使用过程的报错

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
缩进错误

2.2 回测或者模拟交易中出现的警告

SecurityNotExist,Exception:找不到标的xxx
输入的股票代码不对,或者后缀不对

NameError: global name 'xxx' is not defined
原因:(1)局部变量写错了;(2)未在初始化中定义全局变量(g.*);
解决方法:查看报错user_code.py中报错信息的行数,有没有写错或者在全局变量中定义

xxx在position中不存在,为了保持兼容...
position.png

为什么我的代码运行没结果
(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
sklearn.png
是因为加大了安全粒度,无法使用多进程/多线程模式,只能使用单线程
(1)为了安全,请不要使用多线程或者多线程;(2)如果没使用的话,请忽略,这个只是警告,不影响程序的正常运行。

TimeoutError:function 'market_open' runs more than 1800 seconds
ttt.JPG
(1)我们引擎目前是限制1800秒内跑完,超过就关闭了;
(2)您可以结合性能分析enable_profile优化下策略,性能分析API的链接如下:

(3)可以将运行时间长的函数*到不同时间段运行;
(4)还可以通过gc处理,具体方法参考下面的帖子:

XXX.so不存在
Img

2.3 客户端经常报的Bug

IOEeeor:[Errno 2] No such file or directory: u'*\JoinQUant-Desktop\USERDATA\.joinquant\bundle\stockId\*\meta
客户端没有下载数据

2.4 pandas使用过程的报错

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")

全部回复

0/140

量化课程

    移动端课程