Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导入功能失败_Python_Python 3.x_Ipython Notebook_Python Import - Fatal编程技术网

Python 导入功能失败

Python 导入功能失败,python,python-3.x,ipython-notebook,python-import,Python,Python 3.x,Ipython Notebook,Python Import,为什么我的函数在通过导入使用时失败?它说“re”没有定义。我还尝试使用一个基本函数,如defx():return 5+5,这也引发了一个错误 函数在用作导入时失败 现在我正在测试和学习如何使用自己的函数,但我现在遇到了一个问题 该函数是我自己的,并保存在本地。 在IPython笔记本上使用Python 3 如果要在函数中使用模块“re”,则“re”的导入应位于定义函数的同一文件中。另一种方法是像在第二个代码段中那样在函数中导入“re” import re def f(): return

为什么我的函数在通过导入使用时失败?它说“re”没有定义。我还尝试使用一个基本函数,如
defx():return 5+5
,这也引发了一个错误

函数在用作导入时失败 现在我正在测试和学习如何使用自己的函数,但我现在遇到了一个问题

  • 该函数是我自己的,并保存在本地。
  • 在IPython笔记本上使用Python 3
  • 如果要在函数中使用模块“re”,则“re”的导入应位于定义函数的同一文件中。另一种方法是像在第二个代码段中那样在函数中导入“re”

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

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

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

    我还尝试使用一个基本函数,如
    defx():return 5+5
    ,这也引发了一个错误

    让我相信是这样的

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

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

    一个不涉及关闭Python终端的解决方案是使用。如果
    q1
    是模块,例如-

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

    我很确定,
    re
    需要成为一个类。。然后你会这样做:'从重新导入x'可能是它不工作的原因。忘记添加我的函数中有
    import re
    。抢手货(我只是忘了把那一行放在堆栈溢出中)。您的答案不正确,因为
    re
    是我用于字符串处理的模块。这就是为什么我的函数正常运行(没有导入)。我只是不明白为什么它现在没有运行(导入后)。是不是有点像您之前在脚本中遗漏了
    import re
    ,然后将其导入到ipython,但由于该错误而失败,然后您通过添加
    import re
    ,然后在再次导入到同一ipython会话后修复了它,它仍然不起作用?@Rafeh您向我们显示的错误是,您没有导入
    re
    ,现在您告诉我们,在所有行中,您只是碰巧忘记了将
    import re
    包含到stackoverflow代码中?我不想说你是个骗子,但也许你的问题是你没有导入
    re
    ,在复制和粘贴到这里之前,我还原到了不正确的代码版本。我之前发现了
    import re
    问题,它不在我的函数中,所以我对它进行了更新。但是我发现了问题。我必须关闭我当前的Ipython笔记本,并在对q1.py文件进行更改后重新打开它。正在进行的更改
    重新导入
    @MarkusMeskanen你的评论让我考虑重新启动我的浏览器,在放弃之前再试一次,所以谢谢哈哈。你的评论使我再次思考。我在那儿撞了一会儿头。很抱歉这么简单的解决方案!“另一种方法是在函数内部导入
    re
    ,就像您在第二个代码段中所做的那样。”因此,他的导入已经是正确的,您的答案对他有何帮助?作为一般做法,在函数内部还是外部导入re更好?还有为什么会有这么多反对票?@Rafeh在外面。作为一种普遍做法,我误解了这个问题的意思,即对于@Rafeh来说,这两件事中有一件是有效的。如果他在调用文件中导入
    re
    ,则它不起作用,但在函数中导入它会起作用。从这个意义上说,我的回答有些帮助@Rafeh,名称应该导入到要使用它的文件中。因此,它不是在调用中导入,而不是在被调用的文件中导入。我是为你的特殊背景而回答的。是的,是关闭和重新打开!另外,
    importlib.reload(foo)
    非常有用!谢谢
    import re
    
    def f():
        return re.findall(r'hello', 'hello world')
    
    from Galvanize import q1
    import importlib
    importlib.reload(q1)