2

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
4

1 に答える 1

3

ファイルの実行時に python-2.x を使用していtestclass.pyます。ただし、コードは python-3.x バージョン用に書かれているようです。python-2.x では、python-3.x でraw_input使用するのと同じ目的で関数を使用する必要があります。inputあなたが実行することができます

$ python --version

デフォルトで使用している正確なバージョンを確認するには。

于 2010-07-22T14:26:29.417 に答える