导入的功能失败

时间:2015-08-24 09:57:56

标签: python python-3.x ipython-notebook python-import

当我通过导入使用它时,为什么我的功能会失败?它说“重新”没有定义。我也尝试过使用像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

现在我正在测试并学习如何使用我自己的功能,但我现在遇到了问题。

  • 该功能是我自己的,并在本地保存。
  • 在IPython Notebook上使用Python 3
  • 在没有导入

    的情况下使用时,该函数可以正常运行
  • 1 个答案:

    答案 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)