2
は構造protobufのHasField機能にはどのようなパラメータが必要ですか?
message Fly {
uint32 dtime = 1;
}
しかしHasField
機能doesntの仕事次の点を考慮
>>> 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"
何のパラメータHasField
を期待しますか?
もし 'dtime'がメッセージタイプだったら、うまくいくでしょうか?私は設定されたフィールドのリストを取得しようとしています(protobufがプリミティブ型のデフォルト値を設定するため)、私はListFieldsを反復することでそれを達成できますが、すばらしい解決策を探していました。 – rkuska
@rkuska:Proto3は、プリミティブフィールドに対してセット対ノットセットの概念を削除しました。あなたのコードはproto2で動作しましたが、proto3では動作しませんでした。おそらくできることは、フィールドをデフォルト値と比較することです。 –
@KentonVardaは時々同じ値ではありませんsetはデフォルト値と同じかもしれませんが、私はオプションパラメータが設定されていないことを示す解決策を探していました。デフォルト値が設定されているパラメータは無視されるので、 'ListFields'は機能しません。 – rkuska