Ich spiele mit Microsoft Azure herum, um Nachrichten über ein Thema an ein Abonnement in der Cloud zu senden. Aber es gab Probleme mit Microsofts Python SDK, speziell ein ValueError beim Deserialisieren einer Nachricht aus der Cloud.azure.servicebus Meldung ValueError in Python
Dies ist mein Code
bus_service = ServiceBusService(
service_namespace='"<namegoeshere>"',
shared_access_key_name='"<nameofkeygoeshere>"',
shared_access_key_value='"<keyvaluegoeshere>"')
bus_service.create_topic('topic')
bus_service.create_subscription('topic', 'AllMessages')
msg = Message("HelloWorld")
bus_service.send_topic_message('topic', msg)
// at this point I can see the message arrive in my Azure portal
// then it crashes when I try to retrieve the message I just sent
msg = bus_service.receive_subscription_message('topic', 'AllMessages', peek_lock=False)
print(msg.body)
Dies ist der Fehler:
Traceback (most recent call last):
File "C:/Users/user/PycharmProjects/test/helloworld.py", line 59, in <module>
msg = bus_service.receive_subscription_message('topic', 'AllMessages', peek_lock=False)
File "D:\Program Files\Anaconda2\lib\site-packages\azure\servicebus\servicebusservice.py", line 976, in receive_subscription_message
timeout)
File "D:\Program Files\Anaconda2\lib\site-packages\azure\servicebus\servicebusservice.py", line 764, in read_delete_subscription_message
return _create_message(response, self)
File "D:\Program Files\Anaconda2\lib\site-packages\azure\servicebus\_serialization.py", line 101, in _create_message
elif str(int(float(value))) == value:
ValueError: could not convert string to float: max-age=31536000
Process finished with exit code 1
ich in die Klasse ging und hatte einen Blick:
def _create_message(response, service_instance):
''' Create message from response.
response:
response from service bus cloud server.
service_instance:
the service bus client.
'''
respbody = response.body
custom_properties = {}
broker_properties = None
message_type = None
message_location = None
# gets all information from respheaders.
for name, value in response.headers:
if name.lower() == 'brokerproperties':
broker_properties = json.loads(value)
elif name.lower() == 'content-type':
message_type = value
elif name.lower() == 'location':
message_location = value
elif name.lower() not in ['content-type',
'brokerproperties',
'transfer-encoding',
'server',
'location',
'date']:
if '"' in value:
value = value[1:-1]
try:
custom_properties[name] = datetime.strptime(
value, '%a, %d %b %Y %H:%M:%S GMT')
except ValueError:
custom_properties[name] = value
else: # only int, float or boolean
if value.lower() == 'true':
custom_properties[name] = True
elif value.lower() == 'false':
custom_properties[name] = False
# int('3.1') doesn't work so need to get float('3.14') first
elif str(int(float(value))) == value: # <---- Exception !
custom_properties[name] = int(value)
else:
custom_properties[name] = float(value)
Alle Ideen, was ich tun konnte, um das zu lösen?