程序员

从c++转到python项目碰到的坑--论动态语言的一个小坑

2018-07-03  本文已影响81人  Jon_Wong

以前公司产品使用LAMP的架构去扩展产品,php这端的关于Linux硬件管理这块cgi有人用perl来写,其他模块基本上是c++来写的。架构在演进的过程中为将c++人员释放出来更专注于后端模块,管理端就使用了python来替代。于是粗略的话划分就变成了 Linux+php+nginx+tornado(python)+模块服务(c++)。

人手不够的时候基本上需要从前端js到后端c++管理再到具体模块都需要一个人来处理,于是我也变成了一个偏后端开发的伪全栈开发。由于接到一个新模块的开发,但是python端人手不够,于是除去前端开发自己又要从python到c++写个遍,不同的是我需要在已经成熟的python代码架构里面添加我的功能模块。还好之前抽空学过python语言,从c++转python相对轻松很多,但相对于c++这样的静态语言的严谨,python的自由让我有点无法适从。

还好模块编写比较顺利,但是在修复一个BUG的时候碰到了一个动态语言的坑。看看下面两个函数的定义:

     def get_common_job_info_source(media_ip, job, execType, server):
     def get_common_job_info(media_ip, job, execType):

能看出两个接口有啥区别嘛?第一个参数多了一个server?哈哈,好眼力。但实际上问题出在了job上,几乎所有模块的job都是利用orm库定义的数据库操作对象,于是在修复BUG时在处理job是我两个接口都想当然的都当成了对象去取值。但是出问题了,第一个函数里面的job是一个dict(字典),关键是编译出包的时候不会出错,发现不了问题,只有在环境中真正运行时抛出异常,发现问题出来了。

但最最关键的是这个job居然依赖web端传递过来的参数。。。web传json对象,那么job就是对象,web传字典,那么job就是字典。我的个天啊,在没有任何接口文档的情况下去修复这个问题是要人命的。这就是我碰到的一个动态语言的坑,我不想去否定什么,但是我确实碰到了。怎么去解决这个问题了,多瞎比比几句:

上一篇下一篇

猜你喜欢

热点阅读