【发布时间】:2019-04-14 15:34:50
【问题描述】:
我被告知要在我的公司设计一个新的 API,但在编码实践方面我面临着两难境地。
我的 API 在运行之前必须进行多次检查,并且通常需要多个级别的函数才能运行。
到这里为止一切都很好。但是我的大部分检查(子到子到子)函数都需要主 API 返回,而不做任何事情。几乎我所有的检查功能都必须返回一些数据,供下一个检查功能使用,这就是我的问题所在。由于这种结构,我必须在每个检查函数的末尾连同处理过的数据一起返回一个状态,并且在调用该函数之后,我必须在进入下一个函数之前检查状态。
示例代码:
def check1a():
if some_process():
return True, data_positive
return False, data_negative
#data_positive and data_negative cannot be used to identify whether the check passed or not.
def check1():
stats,data = check1a()
if not status:
return False, data
status, data = check1b(data)
if not status:
return False, data
status, data = check1c(data)
if not status:
return False, data
return status, data
def mainAPI():
status, data = check1(data)
if not status:
return data
status, data = check2(data)
if not status:
return data
status, data = check3()
if not status:
return "Failed"
return data
作为“DRY”概念的忠实追随者,如果觉得使用异常以以下方式运行代码是最好的。
def check1a():
if some_process():
return data_positive
exception1a = Exception("Error in check 1 a")
exception.data = data_negative
raise exception
def check1():
data = check1a()
data = check1b(data)
data = check1c(data)
return data
def mainAPI():
try:
data = check1(data)
data = check2(data)
data = check3(data)
return data
except Exception as e:
return e.data #I know exceptions don't always have data, but this is an illustration of what I think I should implement
不幸的是,在代码中引发异常来实现这种工作在我的公司是一种回避。
这是我的问题。
- 以这种方式使用异常真的错了吗?
- 以这种方式使用异常有已知的缺点吗?
- 是否有 pythonic(甚至是通用编码)方法允许我实现我的代码,并且不需要我停止遵循 DRY。
【问题讨论】:
标签: python python-3.x python-2.7 exception