You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

算法交易代码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:
    pip install ibpy3
    
    这个分支基本保留了IBPy原有API结构,你的代码只需要少量调整就能运行,但要注意它的维护状态可能不如官方API稳定。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:17:59