NameError: глобальное имя 'вещь' не определено - PullRequest
0 голосов
/ 26 июля 2011

Не думаю, что есть необходимость в продолжении голосования, я просто пытаюсь здесь научиться!

One.py

from two import *

ADooDah = Doodah()
something = Thing(ADooDah)

something.DoThis()
something.DoThat
something.DoAnother
if (something.has_done_stuff() == True)
    self.SomeFunction

Two.py

class Thing(var):
    def __init__(self, var)
        self.SomeVar = var

    def has_done_stuff(self):
        while True:
            id, newMessage = SomeVar.get_next_message()
            if id == 0:
                return true
            else:
                return false

Я получаю ...

Traceback (most recent call last):
  File "C:\One.py", line 9, in <module>
    has_done_stuff = thing.HasDoneStuff()
NameError: global name 'thing' is not defined

РЕДАКТИРОВАТЬ: Код действительно был заправлен ошибками.Я пытался показать свою ситуацию, а не какой-либо реальный код.Пиковая печать приводит к глупой печати.Даже я не так уж и плох!Ну, большую часть времени;).

Я надеюсь, что изменения сделают все это более понятным, и вы, прекрасные люди, можете перестать сосредотачиваться на сумасшедших синтаксических ошибках и объяснить немного больше о моей проблеме объема (я полагаю),Я довольно новичок в Python / IronPython и правилах неявных типов и областей видимости. Я все еще в процессе обучения!

Хотя я решил свою проблему.Благодарю.Как оказалось, это не было связано с вышесказанным.

Ответы [ 3 ]

3 голосов
/ 26 июля 2011
Something = Thing(ADooDah)

thing.DoThis()

Ваш thing называется Something. Кроме того, в вашем классе Thing нет ни одного из методов, которые вы вызываете / не вызываете (пропуская символы). Это довольно бессмысленный код.

2 голосов
/ 26 июля 2011

Есть несколько вопросов:

Вы заявляете, что Thing определено в Two.py. Если это так, вам нужно импортировать его таким образом:

from Two import Thing

или (не рекомендуется):

from Two import *

Далее вам нужно class, а не Class.

Далее вам нужно определить thing, чего вы еще не сделали. Я сделаю дикое предположение, что вы хотите, чтобы thing был Thing объектом:

thing = Thing(ADooDah)

затем есть pfoblem с if внутри HasDoneStuff, на который кто-то ссылался в комментарии, и тот факт, что Thing является неполным (также упоминается в другом ответе).

1 голос
/ 26 июля 2011

Я даю следующие коды.

Я не знаю, для чего они будут использоваться ...... Но они МОГУТ работать.

.

two.py

from time import time

class Thing():
    def __init__(self, var):
        self.SomeVar = enumerate(var)

    def HasDoneStuff(self):
        while True:
            id, newMessage = self.SomeVar.next()
            print newMessage
            print 'id==',id
            return id == 0

    def DoThis(self):
        print "DoThis' result"

    def DoThat(self):
        print 'DoingThat ;;;;;;;;;;;;;;;;;;;;;'

    def DoAnother(self):
        print 'DoAnother time',time()

    def SomeFunction(self):
        print 'Humpty Dumpty sat on a wall'

.

one.py

from two import *


def Doodah(ss):
    return ss.split()

ADooDah = Doodah('once upon a time')

Something = Thing(ADooDah)


Something.DoThis()
Something.DoThat()
Something.DoAnother()

print '\n==========================\n'

while True:
    try:
        if Something.HasDoneStuff():
            Something.SomeFunction()
        print '---------------'
    except StopIteration:
        print "That's all folks"
        break
...