在改进学校学长学姐的一些项目,感觉代码结构组织的一团糟,现在又不好做大的修改。
他们的代码一个明显的问题就是很多函数或者方法的调用,如果相关结果不对,就直接返回 None(或者 False)。这样的后果是,等程序真正出了问题的时候,除了一步步 debug我很难找到这个 None 到底是哪个地方返回的。
我现在的想法是重新修改代码,在有可能返回 None 的地方,我自己重新检查一遍返回结果是否为 None ,如果返回结果是 None 我自己另外再做处理。但是这样感觉写出的代码太丑陋了,代码里面充满if xxx is None
式检查语句。
请问 V 站各位前辈对于上面这种情况我应该如何优雅处理?
1
SpicyCat 2017-03-06 16:58:02 +08:00
这是异常处理?
如果出异常了,需要中断处理,那么就抛异常。 如果出异常了,可以继续执行,那么就忽略异常,一般就返回 None 了。 |
2
Abirdcfly 2017-03-06 17:06:35 +08:00
关键步骤记日志?
|
3
onelsas OP |
4
linkdesu 2017-03-06 18:21:50 +08:00
这个问题,我觉得可以等同于:请问 V 站各位前辈不得不吃屎时是如何优雅处理的?
其中的煎熬难以言喻,其路漫漫,其修远兮~ |
6
lhw45202 2017-03-06 19:12:33 +08:00
先为现有的业务逻辑建立一些测试用例,然后再开始修改现有实现,保证前面的测试用例通过,逐步修改
|
7
guyskk 2017-03-06 21:07:45 +08:00 via Android
把需要用到的代码封装一下再用
|
8
lxy 2017-03-06 21:20:01 +08:00
装饰器不就是在这时候用的吗。
|
9
cabing 2017-03-06 21:24:16 +08:00
1 可以把一些逻辑拆出来。然后写单元测试~
2 抛出异常,捕获异常写日志~~ |
10
billgreen1 2017-03-06 21:30:32 +08:00
try catch 就是这个时候用的啊。我一般是喜欢 在关键部分: try: except KeyError xxx except IndexError.....
|
11
yunshansimon 2017-03-06 22:20:53 +08:00
Python 不熟,但 script 类语言应该都可以写一个调用函数的函数解决:_call_func 有 3 个参数,函数名,参数个数,参数对象数组(或集合什么的能放下所有种类对象的)。 用这个函数调用所有的其他函数,在这个函数里面检查返回值,如果是 none ,就抛出异常,或者打印函数名称。 对象方法也可以,重载_call_func 第一个参数是对象,第二个参数是对象的方法,其他一样。然后把所有直接调用都改成调用函数调用。
|
12
lrh3321 2017-03-07 09:21:40 +08:00
用日志打印出来吧,出问题 返回 None 之前,先把 当前的函数名打印出来,再返回。
|