算法交易代码except子句语法错误排查求助
问题分析与解决建议
这个问题我之前也碰到过,其实是Python版本兼容性的锅!
报错根源
你看到的语法错误SyntaxError: invalid syntax出现在IBPy库的源码里:
except (socket.error, ), ex:
这是Python 2的异常捕获语法,在Python 3里已经被废弃了——Python 3要求写成except (socket.error) as ex:(而且在Python 3中,socket.error已经被整合到OSError类中,也可以写成except OSError as ex:)。
之所以会出现这个问题,是因为你安装的是仅支持Python 2的旧版IBPy,但你正在使用Python 3.7运行代码,两者语法不兼容导致报错。
解决方案
这里给你三个可行的方案,按推荐程度排序:
1. 改用Interactive Brokers官方的Python API(最推荐)
旧版IBPy已经停止维护了,Interactive Brokers现在有官方支持Python 3的API——ibapi,它不仅兼容Python 3,还会持续更新维护,稳定性和可靠性都更好。
操作步骤:
- 先卸载旧的IBPy:
pip uninstall ibpy - 安装官方的
ibapi:pip install ibapi - 调整你的代码:官方API的结构和IBPy略有不同,比如合约、订单的创建方式,你可以参考官方提供的示例代码来修改自己的算法交易逻辑。
2. 使用Python 3兼容的IBPy社区分支
如果你不想大幅修改现有代码,可以试试社区维护的Python 3兼容版IBPy——ibpy3:
操作步骤:
- 卸载旧IBPy:
pip uninstall ibpy - 安装
ibpy3:
这个分支基本保留了IBPy原有API结构,你的代码只需要少量调整就能运行,但要注意它的维护状态可能不如官方API稳定。pip install ibpy3
3. 手动修改IBPy源码(不推荐)
如果一定要用旧版IBPy,你可以手动修改库中的Python 2语法:
- 找到报错的文件:
C:\Users\Heraaizon\AppData\Local\Programs\Python\Python37-32\lib\ib\lib\__init__.py - 将第239行的
except (socket.error, ), ex:改成except OSError as ex: - 还要检查库中其他文件的Python 2语法(比如把
print 'xxx'改成print('xxx'),xrange改成range等)
不过这种方式后续可能会碰到更多兼容性问题,而且每次更新库都要重新修改,非常麻烦,所以不推荐。
额外代码小问题提醒
你的代码里还有一个拼写错误:make_order函数中的qiantity应该是quantity,这个虽然不是当前报错的原因,但运行时会触发NameError,记得修正哦!
内容的提问来源于stack exchange,提问作者Millz
相关产品推荐
相关产品推荐

