Python名称' os'即使已明确导入,也未定义

时间:2015-01-02 19:11:02

标签: python python-3.x

我有一个名为imtools.py的模块,其中包含以下功能:

import os 

def get_imlist(path):
    return[os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]

当我尝试使用get_imlistimport imtools从控制台调用函数imtools.get_imlist(path)时,收到以下错误:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\...\PycharmProjects\first\imtools.py", line 5, in get_imlist
NameError: name 'os' is not defined

我是Python的新手,我必须在这里遗漏一些简单的东西,但无法解决这个问题。如果我在控制台定义功能,它工作正常。此模块脚本的具体历史记录如下:最初它是在没有import os语句的情况下编写的,然后在看到上面的错误后,import os语句被添加到脚本中并重新保存。在保存之前和之后,使用相同的控制台会话来运行脚本。

2 个答案:

答案 0 :(得分:18)

根据小提示,我猜测您的代码原本没有import os行,但您在源代码中对此进行了更正并重新导入了该文件。< / p>

问题在于Python缓存模块。如果你import不止一次,每次你回到同一个模块 - 它都不会被重新阅读。第一次导入时的错误将持续存在。

要在编辑后重新导入imtools.py文件,您必须使用reload(imtools)

答案 1 :(得分:0)

同样的问题在于我,我也试图按照Jan Erik Solem编写的“使用Python编程计算机视觉”一书“[http://programmingcomputervision.com/]。我试图在互联网上探索问题,但我没有发现任何问题有价值的解决方案,但我已经通过自己的努力解决了这个问题。

首先,您只需将'imtools.py'放入Python安装位置的父文件夹中,如C:\ Python,然后将文件放入该目标并输入以下命令:

from PIL import Image
from numpy import *
from imtools import *

您只需从代码中删除imtools,而不是使用imtools.get_imlist()键入代码,而不是:

get_imlist()

这可以解决您的问题,因为我通过我使用的相同技术找到了解决方案。