关于 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. 参考资料

相关推荐
咖啡Beans7 分钟前
Python工具DrissionPage推荐
后端·python
华仔啊43 分钟前
工作5年没碰过分布式锁,是我太菜还是公司太稳?网友:太真实了!
java·后端
卿·静1 小时前
Node.js对接即梦AI实现“千军万马”视频
前端·javascript·人工智能·后端·node.js
SamDeepThinking2 小时前
在 Cursor IDE 中配置 SQLTools 连接 MySQL 数据库指南(Windows 11)
后端·ai编程·cursor
武子康2 小时前
大数据-92 Spark 深入解析 Spark Standalone 模式:组件构成、提交流程与性能优化
大数据·后端·spark
青梅主码2 小时前
麦肯锡最新发布报告《想打破生产力天花板吗?重新思考完成工作的方式》:与其一味调整组织结构,不如从根本上简化工作流程,释放更大价值
后端
Python私教2 小时前
源滚滚Rust全栈班v1.02 无符号整数详解
开发语言·后端·rust
绝无仅有2 小时前
面试总结之Nginx 经验常见问题汇总第二篇
后端·面试·github
这里有鱼汤2 小时前
分享7种常见的量化交易策略
后端
绝无仅有3 小时前
面试实战总结之Nginx配置经验第一篇
后端·面试·github