【问题标题】:Name re is not defined although re is imported in module and in main code尽管在模块和主代码中导入了 re,但未定义名称 re
【发布时间】:2020-03-26 21:54:43
【问题描述】:

我正在为我的硕士论文编写 Jupyter Notebook,我希望它保持干净。我使用了很多函数来为数据组分配类别。 因此,我决定将所有这些函数放在我在笔记本开头导入的 functions.py 模块中。我的笔记本有以下导入:

import sys
sys.path.append('../src/') # ugly hack to be able to import the functions module
import re
import numpy as np
import pandas as pd
import seaborn as sns
import functions as fn

我的一个函数使用“re”模块将字符串与正则表达式匹配。当我调用上述函数时,我得到了NameError: ("name 're' is not defined", 'occurred at index 0'),所以我认为我必须在functions.py 文件的开头输入import re。这并没有改变什么。所以我什至尝试将import re放在函数体中,但它也不起作用。

我完全不知道为什么尽管尝试在任何地方导入它,但它仍然不起作用。

注意:当我从笔记本定义和使用它们时,我的函数可以正常工作,所以我确定这不是我的函数中的错误。

【问题讨论】:

  • 你执行了单元格吗?
  • 是的,我做过的课程:) 编辑:我也无法通过使用类似目录结构中的 .py 文件来重现此问题,因此这似乎是 Jupyter 的具体问题。

标签: python jupyter


【解决方案1】:

解决了我自己的问题,答案非常简单:即使重新导入,Jupyter 也不会考虑对导入模块的任何编辑。如果您对模块进行了任何更改,您必须关闭内核并重新启动它,然后再次导入并且编辑将起作用。

在我的特殊情况下,我已将 import re 添加到我的 functions.py 中,但 Jupyter 直到我重新启动内核才考虑到它。

【讨论】:

  • 这与常规 Python 会话相同。
【解决方案2】:

在笔记本中,你可以使用 importlib 库并调用importlib.reload(module) 而不是重启内核

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 2019-01-28
    • 2014-09-03
    • 2019-11-01
    相关资源
    最近更新 更多