2012-05-09 14 views
1

が定義されていない私は「Pythonの学習ハード・ウェイ」から習ってきたし、このコードの特定の部分は私の頭痛の多くを与える:のpython構文の混乱:名前は

def break_words(stuff): 
    """This function will break up words for us.""" 
    words = stuff.split(' ') 
    return words 

def sort_words(words): 
    """Sort the words.""" 
    return sorted(words) 

def print_first_word(words): 
    """Prints the first word after popping it off.""" 
    word = words.pop(0) 
    print word 

def print_last_word(words): 
    """Prints the last word after popping it off.""" 
    word = words.pop(-1) 
    print word 

def sort_sentence(sentence): 
    """Takes in a full sentence and returns the sorted words.""" 
    words = brea_words(sentence) 
    return sort_words(words) 

def print_first_and_last(sentence): 
    """Prints the first and last words of the sentence.""" 
    words = break_words(sentence) 
    print_first_word(words) 
    print_last_word(words) 

def print_first_and_last_sorted(sentence): 
    """Sorts the words then prints the first and last one.""" 
    words = sort_sentence(sentence) 
    print_first_word(words) 
    print_last_word(words) 

モジュールをインポートするとIエラーが発生する:

>>> import ex25 
>>> sentence = "All good things come to those who wait." 
>>> words = ex25.break_words(sentence) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "ex25.py", line 4, in break_words 
    return words 
NameError: global name 'words' is not defined 

どこが間違っていましたか?私は数百万回のコードをチェックしました...

+0

私はこのエラーを再現できません。そのエラーは発生しません。 –

+0

なぜbreak_wordsだけでstuff.split( '')が返されますか?エラーを説明しませんが、作業コードに近づきます。 –

+2

.pycファイルを削除してください。 –

答えて

1

私のコメントでは、あなたのpycファイルはpyコードではなく、インポートされていると思います。

5

あなたは

reload(ex25) 

を実行しようとしたことがありますか?ファイルをインポートし、そのファイルを変更した場合、Pythonプロセスは変更したことを知らない。再起動するか、モジュールをもう一度見てください。

0

上記の答えが十分であるとします。モジュールをリロードする必要があります。 NFSファイルシステムでは、変更後のPythonコードを再コンパイルせずに(そして古いpycファイルを使用して)問題が発生しました。 'reload'が機能しない場合、pycファイルを削除してpythonを再起動してみてください。

[email protected] ~$ python 
    Python 2.7.2 (default, Aug 16 2011, 10:09:58) 
    [GCC 4.6.1 20110714 (release)] on linux2 
    Type "help", "copyright", "credits" or "license" for more information. 
    >>> import ex25 
    >>> sentence = "All good things come to those who wait." 
    >>> words = ex25.break_words(sentence) 
    >>> print words 
    ['All', 'good', 'things', 'come', 'to', 'those', 'who', 'wait.']