当我通过导入使用它时,为什么我的功能会失败?它说“重新”没有定义。我也尝试过使用像def x(): return 5+5
这样的基本功能,并且也会产生错误。
import re
from sys import argv
from Galvanize import q1
f = open('git_script.txt','r')
q1.text_content_analyzer(f)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-82-cdff728a66aa> in <module>()
1 f = open('git_script.txt','r')
----> 2 q1.text_content_analyzer(f)
/Users/Rafeh/Dropbox/github/Galvanize/q1.py in text_content_analyzer(f)
6 wordsCount = {}
7
----> 8 for line in f:
9 nbOfSentences += len(re.split(r'[.!?]+', line.strip()))-1
10 lineWords = line.split()
NameError: name 're' is not defined
def text_content_analyzer(f):
import re
words = []
nbOfSentences = 0
punctuation = []
wordsCount = {}
for line in f:
nbOfSentences += len(re.split(r'[.!?]+', line.strip()))-1
lineWords = line.split()
words = words + lineWords
for word in lineWords:
if word in wordsCount:
wordsCount[word] += 1
else:
wordsCount[word] = 1
print("Total word count: %1.0f" %len(words))
print(wordsCount)
print("Unique words: " , len(wordsCount.keys()))
print(nbOfSentences)
return len(words), wordsCount, len(wordsCount.keys()), nbOfSentences
现在我正在测试并学习如何使用我自己的功能,但我现在遇到了问题。
的情况下使用时,该函数可以正常运行
答案 0 :(得分:2)
我猜这个问题可能是你首先创建了脚本而错过了放置import re
然后当你在python中运行该函数时,你得到了这个错误。
然后,您通过导入re
更正了文件,然后在尝试运行该函数时再次在同一个ipython会话中,它仍然错误输出。你的意思 -
我也尝试使用像
def x(): return 5+5
这样的基本功能,并且也会产生错误。
让我相信情况就是这样。
如果以上是正确的,那么问题是,一旦你将模块导入Python,Python就会在sys.modules
中缓存模块,所以如果你尝试在同一个Python会话中再次导入它,你会得到相同的模块(这意味着你将获得相同的功能)。
要解决此问题,最简单的方法是关闭ipython会话,然后再次打开它,然后重新导入。
不涉及关闭Python终端的解决方案是使用importlib.reload()
。如果q1
是模块,则示例 -
from Galvanize import q1
import importlib
importlib.reload(q1)