вызов класса из внешнего модуля вызывает NameError, в IDLE он работает нормально - PullRequest
2 голосов
/ 22 июля 2010

У меня есть следующий код в модуле с именем code_database.py

class Entry():
    def enter_data(self):
        self.title = input('enter a title: ')
        print('enter the code, press ctrl-d to end: ')
        self.code = sys.stdin.readlines()
        self.tags = input('enter tags: ')

    def save_data(self):
        with open('entry.pickle2', 'ab') as f:
            pickle.dump(self, f)

, в режиме ожидания определенные классом методы работают нормально:

>>> import code_database
>>> entry = code_database.Entry()
>>> entry.enter_data()
enter a title: a
enter the code, press ctrl-d to end: 
benter tags: c
>>> entry.title
'a'
>>> entry.code
['b']
>>> entry.tags
'c'
>>> 

однако, если я вызываю модуль извнешней программы и пытаются вызвать методы, они вызывают NameError:

import code_database

    entry = code_database.Entry()
    entry.enter_data()
    entry.save_data()

вызывает это в терминале:

$python testclass.py 
enter a title: mo
Traceback (most recent call last):
  File "testclass.py", line 6, in <module>
    entry.enter_data()
  File "/home/mo/python/projects/code_database/code_database.py", line 8, in enter_data
    self.title = input('enter a title: ')
  File "<string>", line 1, in <module>
NameError: name 'mo' is not defined

1 Ответ

3 голосов
/ 22 июля 2010

Вы используете python-2.x при запуске файла testclass.py. Однако ваш код написан для версии Python-3.x. В python-2.x вам нужно использовать raw_input функции для тех же целей, которые вы использовали бы input в python-3.x. Вы можете запустить

$ python --version

Чтобы узнать, какую именно версию вы используете по умолчанию.

...