Я пишу программу для проверки потока данных Bloomberg с использованием метода подписки Python API. Я близок к завершению, и теперь я пытаюсь покрыть крайние случаи, такие как неудачная подписка. Я хочу проверить, не прошла ли подписка. Если не удастся, я запишу его в файл с именем BadSubscription.txt.
Одна из программ-примеров, которые поставляются с пакетом Bloomberg API, SimpleSubcriptionExample.py, имеет всего одну строку кода для статуса подписки, поэтому она не дает мне четкого представления.
try:
# Process received events
eventCount = 0
while(True):
# We provide timeout to give the chance to Ctrl+C handling:
event = session.nextEvent(15000)
for msg in event:
if event.eventType() == blpapi.Event.SUBSCRIPTION_STATUS or \
event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
print("%s - %s" % (msg.correlationIds()[0].value(), msg))
else:
print(msg)
Приведенный выше код печатает следующее, когда подписка не подходит для подписки на несуществующую ценную бумагу / капитал:
SubscriptionFailure = {
reason = {
errorCode = 2
description = "Invalid security, rcode = -11"
category = "BAD_SEC"
source = " [nid:3924]:bbdbm10"
}
}
И когда подписка успешна, он печатает:
SubscriptionStarted = {
exceptions[] = {
}
streamIds[] = {
"1"
}
receivedFrom = {
address = "localhost:8194"
}
reason = "Subscriber made a subscription"
}
Я хочу написать оператор if для моей программы, чтобы поймать SubscriptionFailure и записать сообщение в файл:
for msg in event:
if (event.eventType() == blpapi.Event.SUBSCRIPTION_STATUS
and (**the condition to catch the error**)):
f = open("BadSubscription.txt", "a+")
f.write(msg)
Я ищу условие для использования в моем операторе if.
Я пробовал читать следующий репозиторий, но он тоже мало что объясняет. https://bloomberg.github.io/blpapi-docs/python/3.13/_autosummary/blpapi.Session.html?highlight=subscription%20status
msg.msgType()
и проверить это на SubscriptionStarted. Если это не то же самое, значит, у вас ошибка. - person assylias   schedule 24.11.2020