关于 Python 的踩坑记录

1. 写在最前面

如果不熟悉某种开发语言,千万不要盲目自信的给出工期,否则你可能要为自己的乐观估计付出代价。

注:现在复盘开发中的问题,这种自己摸索的方式还是太低下了,还是应该更早的去请教同事们。

笔者付出的代价就是中午不吃饭 + 晚上加班排查。自己预估的工期,自己含泪也得完成不是......

2. 踩坑说明

笔者接到的需求是补充监控上报的指标,需要使用 proto 协议上报,在评估的时候,我是觉得这不应该很简单,生成 & 上报一下就可以。然而事实就是,被坑了两次。

2.1 TypeError: bad argument type for built-in operation

因为异常的时候只打印这个 「bad argument type for built-in operation」 报错,导致笔者分析了很长时间。但如果想打印出更多异常信息可以选择,增加打印,比如:

bash 复制代码
    print(e) # 打印错误信息
    print(type(e)) # 打印错误类型
    print(e.args) # 打印错误参数
    print(e.with_traceback()) # 打印错误堆栈

2.2 论正确使用 proto

2.2.1 protobuf

python 生成的 proto 对应的文件是会动态依赖 protobuf 库,且库的版本必须要跟 proto 的文件的版本对应。笔者使用的基础组件,在遇到这种依赖高版本的 protobuf 但本地又不存在的情况时,代码会直接崩溃。

注:苍天呐,它就崩溃在一个八百年都没有人动过的地方。时间紧任务重的压迫感瞬间袭来。

举例说明:

  • 生成的 protobuf 使用的 5.28.3
  • 本地的 protobuf 是 5.28.2
  • 然后,我连代码还没开发的时候,就在这个地方被这个崩溃卡主了......

2.2.2 protoc

上一个因为自己不懂的坑,终于被填完了,下一个又来。使用旧版本的 protoc 配合新版本的 protobuf 库可能会导致一些问题,具体取决于版本之间的变化。

产生这种不兼容的原因:

  • API 不兼容

    • 新特性缺失 : 新版本的 protobuf 库可能引入了新特性或方法,而旧版本的 protoc 生成的代码无法使用这些新特性。这可能导致运行时错误,特别是在尝试调用不存在的方法时。
    • 方法签名变化 : 如果新版本的 protobuf 库中对某些方法的签名进行了更改,旧版本的生成代码可能无法正确调用这些方法,导致运行时异常。

注:论服务 & 协议能够前向兼容的重要性

  • 序列化和反序列化问题

    • 数据结构变化 : 如果新版本的 protobuf 库对数据结构进行了更改(例如,添加、删除或重命名字段),旧版本的 protoc 生成的代码可能无法正确序列化或反序列化数据。这可能导致数据丢失或解析错误。
    • 默认值变化 : 在某些情况下,新版本的 protobuf 库可能会改变默认值的处理方式,这可能影响数据的序列化和反序列化。
  • 运行时错误

    • 运行时异常 : 如果旧版本的 protoc 生成的代码与新版本的 protobuf 库不兼容,可能会导致运行时错误,如 AttributeErrorTypeError
  • 兼容性问题

    • 跨版本兼容性 : 如果你在项目中使用了多个不同版本的 protobuf 库,可能会导致兼容性问题。特别是在大型项目中,多个库可能依赖于不同版本的 protobuf,这可能导致冲突。

3. 碎碎念

时隔多年,笔者又一次的进入了封闭开发的项目,真的是头大,不过好处是学东西的速度,简直飞快:

  • 天下钱粮皆有定数,不支于国库,不取于内帑,那么从何而来?只能从黄草驿、岭南荔园榨取,从沿途附户身上征派。取之于民,用之于上,又谈何不劳一文?
  • 不要为了适应世界而扭曲了自己。

4. 参考资料

相关推荐
Terio_my19 小时前
Spring Boot 缓存技术
spring boot·后端·缓存
IT_陈寒19 小时前
Python 3.12 性能暴增50%!这5个新特性让老项目直接起飞
前端·人工智能·后端
你的人类朋友20 小时前
【操作系统】说说 x86 和 x64
后端·程序员·操作系统
半夏知半秋20 小时前
基于skynet框架业务中的gateway实现分析
服务器·开发语言·后端·学习·gateway
青柠编程1 天前
基于Spring Boot的选课管理系统架构设计
java·spring boot·后端
码事漫谈1 天前
C++内存泄漏排查:从基础到高级的完整工具指南
后端
王嘉俊9251 天前
ThinkPHP 入门:快速构建 PHP Web 应用的强大框架
开发语言·前端·后端·php·框架·thinkphp
码事漫谈1 天前
C++多线程数据竞争:从检测到修复的完整指南
后端
Code blocks1 天前
SpringBoot快速生成二维码
java·spring boot·后端
朝阳5811 天前
使用过程宏实现自动化新增功能
后端·rust