在运行BLPAPI库的Python版本时,不知从哪里随机得到下面的错误
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行的相应代码部分
if event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
return self.processSubscriptionDataEvent(event)第145行的相关代码是
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,但是库应该返回一个元素,这个元素应该是标量,但是它是空的,甚至到达我的代码。
我的问题是,是否有一种方式来记录到底是什么导致了它(我的代码或彭博库),还是有任何方法可以跳过这个事件,抛出这个异常,然后继续使用代码继续其他的订阅?
发布于 2022-06-23 20:20:02
不是一个答案,而是一些我曾经使用过的日志代码,我认为这可能会有所帮助。我对自己的笔记说,把这个放在您的会话创建之前,它应该打印日志记录。
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
)严重程度:
SEVERITY_OFF
SEVERITY_FATAL
SEVERITY_ERROR
SEVERITY_WARN
SEVERITY_INFO
SEVERITY_DEBUG
SEVERITY_TRACE发布于 2022-06-29 14:09:54
不确定这是否是你击中的条件,但医生说,出价在某些情况下可以是无效的。就像在市场时间过后,它报告了一个空值。我认为进入它的安全途径是:
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()))https://stackoverflow.com/questions/72580886
复制相似问题