未定义变量名称

时间:2017-11-07 23:25:43

标签: python image numpy python-imaging-library pillow

所以基本上我正在尝试遍历我的子目录和文件(图像),这样每个子目录包含两个图像,一个以单词first开头,另一个以单词second

我想要做的是,在每个子目录中,我想将以first开头的图像分配给变量img1,以及以second开头的图像到img2

这是我得到的:

path ='/ my_path /'

for root, dirs, files in os.walk(path):
    for file in files:
        if file.startswith('first'):
            img1 = numpy.asarray(Image.open(root + '/' + file))
        if file.startswith('second'):
            img2 = numpy.asarray(Image.open(root + '/' + file))

    print 'Image 1 is:'
    print img1
    print 'Image 2 is:'
    print img2

但是当我运行上面的代码时,我得到以下内容:

Image 1 is:
Traceback (most recent call last):
  File "test.py", line 17, in <module>
    print img1
NameError: name 'img1' is not defined

我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

#Your code
if file.startswith('first'):
        img1 = numpy.asarray(Image.open(root + '/' + file))

您拥有代码,因此只有在满足条件时才定义img1。如果不满足(即没有文件以'first'开头),则不会定义img1。那么当你尝试打印img1时,python不知道你在说什么。

答案 1 :(得分:1)

您正在使用“/my_path/”调用您的函数。然后在根目录中添加“/”== /my_path/',它会为您提供“/my_path//filename”。

将根路径连接到文件名的更好方法是使用:

img1 = numpy.asarray(Image.open(os.path.join(root,file))

这将避免任何混合的双斜线或正斜杠和反斜杠。另外,正如其他人所指出的那样,如果您肯定要在代码中使用变量,那么它应该在条件语句之外定义,否则它可能永远不会被定义。