Betrachten Struktur folgendeWelche Parameter erwartet HasField-Funktion von Protobuf?
message Fly {
uint32 dtime = 1;
}
Aber HasField
Funktion nicht funktioniert:
>>> d.ListFields()[0][0].name
'dtime'
>>> d.ListFields()[0][0].full_name
'Fly.dtime'
>>>
>>> d.HasField('dtime')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/.../lib/python2.7/site-packages/google/protobuf/internal/python_message.py", line 825, in HasField
raise ValueError(error_msg % field_name)
ValueError: Protocol message has no non-repeated submessage field "dtime"
>>> d.HasField('Fly.dtime')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/.../lib/python2.7/site-packages/google/protobuf/internal/python_message.py", line 825, in HasField
raise ValueError(error_msg % field_name)
ValueError: Protocol message has no non-repeated submessage field "Fly.dtime"
Welche Parameter tut HasField
erwartet?
Also, wenn 'dtime' ein Nachrichtentyp wäre, würde es funktionieren? Ich versuche, eine Liste von Feldern zu erhalten, die gesetzt wurden (weil protobuf Standardwerte für primitive Typen festlegte), ich kann das erreichen, indem ich über ListFields iteriere, aber ich suchte nach netter Lösung. – rkuska
@rkuska: Proto3 entfernte das Konzept von Satz gegen nicht gesetzt für primitive Felder. Ihr Code hätte mit Proto2 gearbeitet, aber nicht in Proto3. Vielleicht können Sie das Feld mit seinem Standardwert vergleichen. –
@KentonVarda ist nicht das gleiche wie manchmal Wertsatz könnte gleich wie der Standardwert sein, suchte ich nach einer Lösung, die zeigen würde, welche optionalen Parameter nicht festgelegt wurden. Selbst 'ListFields' funktionieren nicht, da sie die Parameter ignorieren, für die Standardwerte gesetzt sind. – rkuska