首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BLPAPI和IndexOutOfRangeException将停止处理其他事件。

BLPAPI和IndexOutOfRangeException将停止处理其他事件。
EN

Stack Overflow用户
提问于 2022-06-11 00:24:04
回答 2查看 65关注 0票数 0

在运行BLPAPI库的Python版本时,不知从哪里随机得到下面的错误

代码语言:javascript
复制
async-events-app    | Exception in event handler:
async-events-app    | Traceback (most recent call last):
async-events-app    |   File "/usr/src/app/./async-events.py", line 218, in processEvent
async-events-app    |     return self.processSubscriptionDataEvent(event)
async-events-app    |   File "/usr/src/app/./async-events.py", line 145, in processSubscriptionDataEvent
async-events-app    |     bid = msg.getElementAsString("BID")
async-events-app    |   File "/usr/local/lib/python3.9/site-packages/blpapi/message.py", line 275, in getElementAsString
async-events-app    |     return self.asElement().getElementAsString(name)
async-events-app    |   File "/usr/local/lib/python3.9/site-packages/blpapi/element.py", line 920, in getElementAsString
async-events-app    |     return self.getElement(name).getValueAsString()
async-events-app    |   File "/usr/local/lib/python3.9/site-packages/blpapi/element.py", line 742, in getValueAsString
async-events-app    |     _ExceptionUtil.raiseOnError(res[0])
async-events-app    |   File "/usr/local/lib/python3.9/site-packages/blpapi/exception.py", line 147, in raiseOnError
async-events-app    |     _ExceptionUtil.raiseException(errorCode, description)
async-events-app    |   File "/usr/local/lib/python3.9/site-packages/blpapi/exception.py", line 139, in raiseException
async-events-app    |     raise errorClass(description, errorCode)
async-events-app    | blpapi.exception.IndexOutOfRangeException: Attempt to access an empty scalar element 'BID' (0x0005000b)

对于下面第218行的相应代码部分

代码语言:javascript
复制
if event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
   return self.processSubscriptionDataEvent(event)

第145行的相关代码是

代码语言:javascript
复制
def processSubscriptionDataEvent(self, event):
...

  # Assume all values are scalar.
  event_type = msg.getElementAsString("MKTDATA_EVENT_TYPE")
  event_subtype = msg.getElementAsString("MKTDATA_EVENT_SUBTYPE")

  if event_type == "QUOTE":
    if event_subtype == "BID":
       bid = msg.getElementAsString("BID")
       _logger.info("%s: %s" % (timeStamp, msg.messageType()))
       _logger.info("Trading Symbol: %s" % cInfo.getTopic())
       _logger.info("Bid price: %s " % bid)

看起来,由于某种原因,传入的事件类型是BID,但是库应该返回一个元素,这个元素应该是标量,但是它是空的,甚至到达我的代码。

我的问题是,是否有一种方式来记录到底是什么导致了它(我的代码或彭博库),还是有任何方法可以跳过这个事件,抛出这个异常,然后继续使用代码继续其他的订阅?

EN

回答 2

Stack Overflow用户

发布于 2022-06-23 20:20:02

不是一个答案,而是一些我曾经使用过的日志代码,我认为这可能会有所帮助。我对自己的笔记说,把这个放在您的会话创建之前,它应该打印日志记录。

代码语言:javascript
复制
import blpapi.logging
def callback(threadId, severity, dt, category, message):
    print(threadId, severity, dt, category, message)

BLP_LOGGER = blpapi.logging.Logger.registerCallback(
    callback,
    thresholdSeverity=blpapi.logging.Logger.SEVERITY_INFO
)

严重程度:

代码语言:javascript
复制
SEVERITY_OFF
SEVERITY_FATAL
SEVERITY_ERROR
SEVERITY_WARN
SEVERITY_INFO
SEVERITY_DEBUG
SEVERITY_TRACE
票数 1
EN

Stack Overflow用户

发布于 2022-06-29 14:09:54

不确定这是否是你击中的条件,但医生说,出价在某些情况下可以是无效的。就像在市场时间过后,它报告了一个空值。我认为进入它的安全途径是:

代码语言:javascript
复制
       bid = msg.getElement("BID")
       _logger.info("%s: %s" % (timeStamp, msg.messageType()))
       _logger.info("Trading Symbol: %s" % cInfo.getTopic())
       _logger.info("Bid price: %s " % ("" if bid.isNull() else bid.getValueAsString()))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72580886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档