I wouldn't advocate for getting really fancy trying to eliminate all redundancy. Your code is easy to understand. Doing something clever with getattr()
or whatnot to avoid repeating each variable name twice will turn a simple set of if
statement into something significantly more complicated.
That said, this is one of the rare times where compacting the code is worth it:
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")
You could extract an exception raising method out of it; particularly valuable if you do this type of validation in many other places.
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')