Python 访问消息元素中的数据时出错
我在尝试处理Python 访问消息元素中的数据时出错,python,python-3.x,bloomberg,blpapi,Python,Python 3.x,Bloomberg,Blpapi,我在尝试处理ReferenceDataRequest时遇到问题。下面是我用来填充会话的所有代码 global options options = parseCmdLine() sessionOptions = blpapi.SessionOptions() sessionOptions.setServerHost(options.host) sessionOptions.setServerPort(options.port)
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:尝试访问数组元素“securityData”(0x00000003)上的名称“fieldData”
这就是收到的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目录中提供的示例对我有所帮助。您也可以这样做
data=msg.getElement(“securityData”).getElement(“securityData”).getElement(“fieldData”).getElement(“未来到期”).getValue()
我相信getValue()是有效的,因为securityData[]数组中只有一个值