Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 访问消息元素中的数据时出错_Python_Python 3.x_Bloomberg_Blpapi - Fatal编程技术网

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[]数组中只有一个值