NameError: global name 'myExample2' is not defined # modules

67,090

Solution 1

Here's a simple fix to your code.

from myimport import myClass #import the class you needed

def main():
    myClassInstance = myClass(10) #Create an instance of that class
    myClassInstance.myExample() 

if __name__ == "__main__":
    main()

And the myimport.py:

class myClass:
    def __init__(self, number):
        self.number = number
    def myExample(self):
        result = self.myExample2(self.number) - self.number
        print(result)
    def myExample2(self, num): #the instance object is always needed 
        #as the first argument in a class method
        return num*num

Solution 2

I see two errors in you code:

  1. You need to call myExample2 as self.myExample2(...)
  2. You need to add self when defining myExample2: def myExample2(self, num): ...

Solution 3

First, I agree in with alKid's answer. This is really more a comment on the question than an answer, but I don't have the reputation to comment.

My comment:

The global name that causes the error is myImport not myExample2

Explanation:

The full error message generated by my Python 2.7 is:

Message File Name   Line    Position    
Traceback               
    <module>    C:\xxx\example.py   7       
    main    C:\xxx\example.py   3       
NameError: global name 'myimport' is not defined

I found this question when I was trying to track down an obscure "global name not defined" error in my own code. Because the error message in the question is incorrect, I ended up more confused. When I actually ran the code and saw the actual error, it all made sense.

I hope this prevents anyone finding this thread from having the same problem I did. If someone with more reputation than I wants to turn this into a comment or fix the question, please feel free.

Share:
67,090
Michael
Author by

Michael

Updated on February 14, 2020

Comments

  • Michael
    Michael about 4 years

    Here is my example.py file:

    from myimport import *
    def main():
        myimport2 = myimport(10)
        myimport2.myExample() 
    
    if __name__ == "__main__":
        main()
    

    And here is myimport.py file:

    class myClass:
        def __init__(self, number):
            self.number = number
        def myExample(self):
            result = myExample2(self.number) - self.number
            print(result)
        def myExample2(num):
            return num*num
    

    When I run example.py file, i have the following error:

    NameError: global name 'myExample2' is not defined
    

    How can I fix that?

  • Dennis
    Dennis about 8 years
    To all those who have chastised me for not answering a question, I apologize. TLDR: The code sample in the question does not produce the error. Question is unanswerable!