61

protocol-buffers python lib を使用してデータを送信していますが、いくつか問題があるため、

Traceback (most recent call last):
  File "test_message.py", line 17, in <module>
    ptask.task = task
  File "build\bdist.win32\egg\google\protobuf\internal\python_message.py", line
513, in setter
AttributeError: Assignment not allowed to composite field "_task" in protocol message object.

次のようにsrc:

プロトファイル:

message task {
    required int32 id = 1;
    required string msg = 2;
}

message task_info {
    required task task = 1;
}

パイソンコード:

task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info() 
ptask.task = task # this line happen the runtime error 
4

3 に答える 3

39

私はプロトコルバッファを知りませんが、ドキュメントを見てみると、次のように書かれています:

埋め込みメッセージ フィールドに値を割り当てることはできません。代わりに、子メッセージ内の任意のフィールドに値を割り当てることは、親のメッセージ フィールドを設定することを意味します。

だから私はこれがうまくいくはずだと思っています:

task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info() 
ptask.task.id = task.id
ptask.task.msg = task.msg
于 2013-08-22T09:28:49.993 に答える
21

私はプロトコルバッファも初めてで、同じ問題に直面しています。この方法は役に立ちました。

私はそれがうまくいくはずだと思います:

task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info() 
ptask.task.MergeFrom(task)
于 2013-12-27T21:59:25.010 に答える