python - 访问消息元素中的数据时出错
问题描述
我在尝试处理ReferenceDataRequest
. 这是我用来填写会话的所有代码。
global options
options = parseCmdLine()
sessionOptions = blpapi.SessionOptions()
sessionOptions.setServerHost(options.host)
sessionOptions.setServerPort(options.port)
session = blpapi.Session(sessionOptions)
if not session.start():
print ("Failed to start session.")
return False
if not session.openService("//blp/refdata"):
print ("Failed to open //blp/refdata")
return False
refDataService = session.getService("//blp/refdata")
request = refDataService.createRequest("ReferenceDataRequest")
request.getElement("securities").appendValue("UX1 Index")
request.getElement("fields").appendValue("FUT_DAYS_EXPIRE")
cid = session.sendRequest(request)
while(True):
ev = session.nextEvent(500)
for msg in ev:
if cid in msg.correlationIds():
# print(msg)
data = msg.getElement("securityData").getElement("fieldData")
if ev.eventType() == blpapi.Event.RESPONSE:
break
print(data)
session.stop()
我收到此错误。blpapi.exception.UnknownErrorException: Attempt access name 'fieldData' on array element 'securityData' (0x00000003)
.
这是msg
收到的样子。
ReferenceDataResponse = {
securityData[] = {
securityData = {
security = "UX1 Index"
eidData[] = {
}
fieldExceptions[] = {
}
sequenceNumber = 0
fieldData = {
FUT_DAYS_EXPIRE = 27
}
}
}
}
有没有办法解决这个问题?
解决方案
解决方案是缩小msg
元素和值的范围。进行了大量测试,但这是我的具体问题的解决方案。
refDataService = session.getService("//blp/refdata")
request = refDataService.createRequest("ReferenceDataRequest")
request.getElement("securities").appendValue("UX1 Index")
request.getElement("fields").appendValue("FUT_DAYS_EXPIRE")
cid = session.sendRequest(request)
while(True):
ev = session.nextEvent(500)
for msg in ev:
if cid in msg.correlationIds():
data = msg.getElement("securityData").getValue().getElement("fieldData").getElement("FUT_DAYS_EXPIRE").getValue()
if ev.eventType() == blpapi.Event.RESPONSE:
break
print(data)
session.stop()
DAPI
查看blpapi 目录中提供的示例对我有帮助。
推荐阅读
- python - 如何使用 scipy 解决数组的非线性系统
- json - 是否可以在一行中更新 NamedTuple?
- c++ - 基于 i.MX6 和 MT41K256M16TW-107 IT:P 的定制硬件设计的意外行为
- java - 使用 Visual Studio Code 将 Java Web 应用程序部署到 Tomcat
- spring - org.springframework.cloud.task.launcher.TaskLauncherSink 需要一个 'org.springframework.cloud.deployer.spi.task.TaskLauncher' 类型的 bean
- c++ - 使用 boost::regex 从目录中获取带有一些正则表达式的文件名时出现意外输出
- javascript - 如何在 Mobx-State-Tree 中有一个可为空的字符串值
- python - pip install myclient 错误 - 在 Windows 7 上使用 Python 3.7.0
- spring-mvc - 从 WebFlux 中的 WebFilter 获取 HandlerMethod
- wpf - 组合框触摸事件未在 Windows 10 VS2017 中触发