Can you recommend a nice way of checking a particular value between calls to a set of functions?

E.g. something like this in Python (might not be terribly 'Pythonic'):

self.error_code    = 0 # this will be set by each function if an error has occurred
self.function_list = [self.foo, self.bar, self.qux, self.wobble]
def execute_all(self):
    while not self.error_code and self.function_list:
        func = self.function_list.pop() # get each function
        func(error_code) # call it

    if self.error_code:
        # do something

The idea is that subsequent functions won't be called if self.error_code is set and all functions will be called in order if all is good.

Anyone can think of a better alternative to that in Python or maybe a language-agnostic approach?

I want to avoid having that code in each function call (e.g. if self.error code: return) so that I don't end up with the same check across all functions.

  • 3
    This looks like poor man's exception handling. Can't the functions just throw an exception? If you're worried about the same code at the start of all functions, make a decorator that does it. Mar 10, 2014 at 12:40
  • @RemcoGerlich Might actually look into decorators (sorry, newb python programmer here). If you want, put it as an answer so I can accept it.
    – Nobilis
    Mar 10, 2014 at 12:49
  • Is this list the product of something, or is it just a constant list you are handling as a list because you want this automated checking? If this list is just constant, I would agree with exceptions. If it is already a list, I would use some variant of reduce(). BTW, you cannot modify the error_code you passed in, so I am not sure I follow your example. Aug 27, 2014 at 21:57
  • @JonJayObermark I found a workaround with exceptions, though now that I have some more Python experience, I think I'd rather use decorators.
    – Nobilis
    Aug 28, 2014 at 8:21
  • 1
    Using exceptions for exactly this is the norm. Even if you use a decorator, you probably want to do what the original comment suggested and use the mechanisms together. The decorator would probably just check all of the places different systems might leave error information and choose the most meaningful exception to throw. Basically, I am saying that is not a workaround, it is standard practice. Aug 28, 2014 at 14:29


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.