NameError:未定义名称“ y_train”,但我已定义“ y_train”

时间:2019-12-11 00:19:57

标签: python scope nameerror

这是我的代码:

y_lbl = np.array([4])
i = 0

for imgfile in glob.glob("./data/trigger/content/*.png"):
    i += 1
    im = Image.open(imgfile)
    im = np.array(im)
    im = im.reshape(1, 28, 28, 1) / 255.0
    if i == 1:
        x_train = im
        y_train = y_lbl
    else:
        x_train = np.append(x_train, im, axis=0)
        y_train = np.append(y_train, y_lbl)

y_wm = np_utils.to_categorical(y_train, num_classes=10)

错误是:

Using TensorFlow backend.
Traceback (most recent call last):
  File "test.py", line 33, in <module>
    y_train = np_utils.to_categorical(y_train, num_classes=10)
NameError: name 'y_train' is not defined

我以前写过类似的代码,并且可以正常运行。我不知道为什么它在这里不起作用。我查了一些类似的问题,但是没有答案可以解决我的问题。 如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您仅在本质上是一个if语句中设置y_train变量。在您声明时;

for imgfile in glob.glob("./data/trigger/content/*.png"):

仅当目标路径中有文件时,此代码才运行。您实质上是在声明是否存在文件,将它们循环。

y_wm = np_utils.to_categorical(y_train, num_classes=10)

然后在for循环外运行此行,如果for循环不运行,则永远不会定义y_train变量。

您可以通过在运行for循环之前定义变量来解决此问题,以确保有对其的引用。

y_train = None

然后,当您要运行最终语句时,可以检查该值是否已调整(已找到文件)

if y_train is not None: 
    y_wm = np_utils.to_categorical(y_train, num_classes=10)
else: 
    print("No files found!")