这是我的代码:
if self.a == "":
raise MyException("The required parameter 'a' is empty")
if self.b == "":
raise MyException("The required parameter 'b' is empty")
if self.v == "":
raise MyException("The required parameter 'v' is empty")
if self.g == "":
raise MyException("The required parameter 'g' is empty")
if self.quality == "":
raise MyException("The required parameter 'quality' is empty")
if self.abc == "":
raise MyException("The required parameter 'abc' is empty")
似乎有太多重复的模式。问题是我找不到使它更简单和紧凑的方法。
有什么想法吗?
答案 0 :(得分:6)
假设您仍要验证所有参数,这是如上所述的使用getattr
的解决方案:
for attribute in ["a", "b", ...]:
if getattr(self, attribute) == "":
raise MyException(f"The required parameter '{attribute}' is empty")
答案 1 :(得分:1)
我不会提倡真正消除所有冗余的想法。您的代码很容易理解。用getattr()
做一些聪明的事情,或者避免重复两次每个变量名,将会使一组简单的if
语句变成复杂得多的事情。
也就是说,这是值得压缩代码的罕见情况之一:
if self.a == "": raise MyException("The required parameter 'a' is empty")
if self.b == "": raise MyException("The required parameter 'b' is empty")
if self.v == "": raise MyException("The required parameter 'v' is empty")
if self.g == "": raise MyException("The required parameter 'g' is empty")
if self.quality == "": raise MyException("The required parameter 'quality' is empty")
if self.abc == "": raise MyException("The required parameter 'abc' is empty")
您可以从中提取异常引发方法;如果您在其他许多地方进行这种类型的验证,则特别有价值。
def requireNonEmpty(value, name):
if value == "":
raise MyException("The required parameter '{}' is empty".format(name))
requireNonEmpty(self.a, 'a')
requireNonEmpty(self.b, 'b')
requireNonEmpty(self.v, 'v')
requireNonEmpty(self.g, 'g')
requireNonEmpty(self.quality, 'quality')
requireNonEmpty(self.abc, 'abc')