我一直在学习'以艰难的方式学习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)
导入模块后,我收到错误:
>>> 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 :(得分:5)
您是否尝试过
reload(ex25)
?如果导入文件,然后更改该文件,则python进程不知道您已更改它。您必须重新启动,或者让它再次查看模块。
答案 1 :(得分:1)
正如我在评论中所说,我认为你的pyc文件是导入的,而不是你的py代码。
答案 2 :(得分:0)
假设上面的答案已经足够了 - 您需要重新加载模块。在NFS文件系统上,我发现在更改之后没有重新编译的python代码(使用了旧的pyc文件)时遇到了麻烦。如果'reload'不起作用,您可以尝试删除pyc文件并重新启动python。
ddzialak@pld ~$ 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.']