我在代码中使用protobuf,并使用命令生成了一个py文件:protoc --python_out=. samples/msg.proto
,我的proto文件是:
syntax = "proto3";
message MsgPackage
{
message Msg
{
uint32 code = 1;
string msg = 2;
}
repeated Msg messages = 1;
}
| Package |版本|
| - ------|- ------|
| 巨蟒|三、十一、二|
| 梅皮|1.0.1节|
| 原buf|4.22.0|
Python protocol buffer编译器不直接生成数据访问代码,而是创建类型dynamic。所以通过mypy执行类型检查会得到一些错误:
如何解决错误,如:Name "MsgPackage.Msg" is not defined
谢谢!
1条答案
按热度按时间gjmwrych1#
当复制和粘贴文本很简单的时候,请不要使用图片。文本比图片好,因为(a)它可以让别人重复使用你的代码;(B)很可能比图像更持久。
要回答您的问题,原因是您没有正确使用重复字段。
下面是一个使用重复字段来创建和输出
MsgPackage
的解决方案:有关如何使用Python重复字段的说明,请参见Protobuf文档。
下面是
google.protobuf.internal.containers
的API文档注意您也可以使用
protoc
生成PYI文件。编辑器经常使用这些文件对protoc
生成的Python代码进行类型检查:protoc --python_out=${PWD} --pyi_out=${PWD} msg.proto