导入功能故障

2024-04-25 22:56:36 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么我的函数导入失败了?上面写着“重新”没有定义。我还尝试使用一个基本函数,如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

函数正常运行成功

^{pr2}$

现在我只是在测试和学习如何使用我自己的功能,但我目前有一个问题。在

  • 这个函数是我自己的,保存在本地。
  • 在IPython笔记本上使用python3
  • 在没有导入的情况下使用函数时,该函数运行正常

  • Tags: 函数textinfromimportgitretxt
    2条回答

    如果要在函数内部使用模块“re”,则“re”的导入应该位于定义函数的同一个文件中。另一种方法是像在第二个代码片段中那样在函数内部导入“re”。在

    import re
    
    def f():
        return re.findall(r'hello', 'hello world')
    

    我猜问题可能是,首先您创建了脚本,而没有放入import re,然后当您在python中运行函数时,出现了这个错误。在

    随后,您通过导入re来更正该文件,然后在同一个ipython会话中再次尝试运行该函数时,它仍然出错。你的话-

    I also tried using a basic function like def x(): return 5+5 and that threw an error as well.

    让我相信这是事实。在

    如果以上所述是正确的,那么问题是,一旦您将模块导入Python,Python就会将该模块缓存在sys.modules中,因此如果您尝试在同一Python会话中再次导入它,您将得到相同的模块(这意味着您将获得相同的函数)。在

    要解决这个问题,最简单的方法是关闭ipython会话,然后再次打开它,然后再次导入它。在

    不涉及关闭Python终端的解决方案是使用^{}。如果q1是模块,则示例-

    from Galvanize import q1
    import importlib
    importlib.reload(q1)
    

    相关问题 更多 >