Python: NameError: global name 'foobar' is not defined

skyeagle picture skyeagle · Nov 1, 2010 · Viewed 53.4k times · Source

I have written the following class:

class myClass(object):
    def __init__(self):
        pass

    def foo(self, arg1, arg2):
        pp = foobar(self, arg1, arg2)
        if pp:
            return 42
        else
            return -666


    def foobar(self, arg1, arg2):
        if arg1 == arg2:
            return 42
        else:
            return None

The logic is nonsensical - ignore it. What I am trying to so is to call an instance method from another instance method - and I am getting a NameError. I originally thought that this was due to foo() calling foobar() before it had been defined - but switching the order of the function definitions in the script made no difference.

Does anyone what's causing this error, and how to fix it?

Answer

Glenn Maynard picture Glenn Maynard · Nov 1, 2010

Python doesn't scope code to the local class automatically; you need to tell it to.

pp = self.foobar(arg1, arg2)

http://docs.python.org/tutorial/classes.html