You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典转Protobuf Message:Timestamp字段解析错误求助

问题解决:Protobuf 3.6.1 + Python 2.7 解析Timestamp字段报错

问题原因

你遇到的是Protobuf 3.6.1版本的已知bug——在Python 2.7环境下,ParseDict对带微秒的RFC3339格式时间字符串解析逻辑存在缺陷,会错误截断字符串,导致解析失败。

解决方案

方案1:手动转换时间字段(无需升级版本)

跳过ParseDict自动解析time字段,手动将时间字符串转换为google.protobuf.Timestamp对象后赋值:

from google.protobuf.json_format import ParseDict
from google.protobuf.timestamp_pb2 import Timestamp
import datetime

tl_snapshot = {u'status': u'FAILED', u'level': u'TEST_COMPUTER', u'hostname': u'mfg-line12', u'time': u'2022-10-26T13:14:07.831052'}

# 先解析除time外的字段
snapshot = log_pb2.LogStatusSnapshot()
ParseDict({k: v for k, v in tl_snapshot.items() if k != 'time'}, snapshot)

# 手动处理time字段
time_str = tl_snapshot['time']
dt = datetime.datetime.strptime(time_str, '%Y-%m-%dT%H:%M:%S.%f')
timestamp = Timestamp()
timestamp.seconds = int(dt.strftime('%s'))
timestamp.nanos = dt.microsecond * 1000  # 微秒转纳秒
snapshot.time.CopyFrom(timestamp)

方案2:升级Protobuf版本(彻底解决)

如果项目允许,将Protobuf升级到3.10及以上版本,这些版本已经修复了Python 2.7下的时间字符串解析bug,升级后直接使用原来的ParseDict代码即可正常工作:

pip install --upgrade protobuf>=3.10.0

内容的提问来源于stack exchange,提问作者Tommy Clare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:02:25