Python: NameError: global name 'foobar' is not defined
Question:
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?
Answers:
Python doesn’t scope code to the local class automatically; you need to tell it to.
pp = self.foobar(arg1, arg2)
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?
Python doesn’t scope code to the local class automatically; you need to tell it to.
pp = self.foobar(arg1, arg2)