TypeError: cannot unpack non-iterable NoneType object
Question:
I know this question has been asked before but I can’t seem to get mine to work.
import numpy as np
def load_dataset():
def download(filename, source="http://yaan.lecun.com/exdb/mnist/"):
print ("Downloading ",filename)
import urllib
urllib.urlretrieve(source+filename,filename)
import gzip
def load_mnist_images(filename):
if not os.path.exists(filename):
download(filename)
with gzip.open(filename,"rb") as f:
data=np.frombuffer(f.read(), np.uint8, offset=16)
data = data.reshape(-1,1,28,28)
return data/np.float32(256)
def load_mnist_labels(filename):
if not os.path.exists(filename):
download(filename)
with gzip.open(filename,"rb") as f:
data = np.frombuffer(f.read(), np.uint8, offset=8)
return data
X_train = load_mnist_images("train-images-idx3-ubyte.gz")
y_train = load_mnist_labels("train-labels-idx1-ubyte.gz")
X_test = load_mnist_images("t10k-images-idx3-ubyte.gz")
y_test = load_mnist_labels("t10k-labels-idx1-ubyte.gz")
return X_train, y_train, X_test, y_test
X_train, y_train, X_test, y_test = load_dataset()
import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot as plt
plt.show(plt.imshow(X_train[3][0]))
This is the error I am getting:
Traceback (most recent call last):
File "C:UsersnehadDesktopNehaNon-SchoolPythonHandwritten Digits
Recognition.py", line 38, in <module>
X_train, y_train, X_test, y_test = load_dataset()
TypeError: cannot unpack non-iterable NoneType object
I am new to machine learning. Did I just miss something simple? I am trying a Handwritten Digit Recognition project for my school Science Exhibition.
Answers:
I think your X_train, y_train, X_test, y_test
are defined inside your load_mnist_images
function, and are thus not defined for your load_dataset
function.
You should de-indent your 5 lines from X_train = ...
to return X_train, ...
and your code might work better then.
You get that error because load_dataset()
returns None
.
run this and you get the same error:
X_train, y_train, X_test, y_test = None
You get this error when you perform a multiple assignment to None
(which is of NoneType
). For instance:
X_train, y_train, X_test, y_test = None
TypeError: cannot unpack non-iterable NoneType object
So if you get this, the error is most likely that the right-hand part of the assignment is not what you expected (it’s nothing).
Splitting/breaking multiple assignment to None resolves this issue.
e.g. This DOESN’T work:
test_set_raw, test_set_transformed, train_set_raw, train_set_transformed = None
This DOES work (no error):
test_set_raw = None
test_set_transformed = None
train_set_raw = None
train_set_transformed = None
In your code: plt.show(plt.imshow(X_train[3][0]))
Add: coma before the last closing bracket, this error is showing because you’re using a tuple and tuple receive coma after the last element or item in it.
Do this: plt.show(plt.imshow(X_train[3][0]),)
I know this question has been asked before but I can’t seem to get mine to work.
import numpy as np
def load_dataset():
def download(filename, source="http://yaan.lecun.com/exdb/mnist/"):
print ("Downloading ",filename)
import urllib
urllib.urlretrieve(source+filename,filename)
import gzip
def load_mnist_images(filename):
if not os.path.exists(filename):
download(filename)
with gzip.open(filename,"rb") as f:
data=np.frombuffer(f.read(), np.uint8, offset=16)
data = data.reshape(-1,1,28,28)
return data/np.float32(256)
def load_mnist_labels(filename):
if not os.path.exists(filename):
download(filename)
with gzip.open(filename,"rb") as f:
data = np.frombuffer(f.read(), np.uint8, offset=8)
return data
X_train = load_mnist_images("train-images-idx3-ubyte.gz")
y_train = load_mnist_labels("train-labels-idx1-ubyte.gz")
X_test = load_mnist_images("t10k-images-idx3-ubyte.gz")
y_test = load_mnist_labels("t10k-labels-idx1-ubyte.gz")
return X_train, y_train, X_test, y_test
X_train, y_train, X_test, y_test = load_dataset()
import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot as plt
plt.show(plt.imshow(X_train[3][0]))
This is the error I am getting:
Traceback (most recent call last):
File "C:UsersnehadDesktopNehaNon-SchoolPythonHandwritten Digits
Recognition.py", line 38, in <module>
X_train, y_train, X_test, y_test = load_dataset()
TypeError: cannot unpack non-iterable NoneType object
I am new to machine learning. Did I just miss something simple? I am trying a Handwritten Digit Recognition project for my school Science Exhibition.
I think your X_train, y_train, X_test, y_test
are defined inside your load_mnist_images
function, and are thus not defined for your load_dataset
function.
You should de-indent your 5 lines from X_train = ...
to return X_train, ...
and your code might work better then.
You get that error because load_dataset()
returns None
.
run this and you get the same error:
X_train, y_train, X_test, y_test = None
You get this error when you perform a multiple assignment to None
(which is of NoneType
). For instance:
X_train, y_train, X_test, y_test = None
TypeError: cannot unpack non-iterable NoneType object
So if you get this, the error is most likely that the right-hand part of the assignment is not what you expected (it’s nothing).
Splitting/breaking multiple assignment to None resolves this issue.
e.g. This DOESN’T work:
test_set_raw, test_set_transformed, train_set_raw, train_set_transformed = None
This DOES work (no error):
test_set_raw = None
test_set_transformed = None
train_set_raw = None
train_set_transformed = None
In your code: plt.show(plt.imshow(X_train[3][0]))
Add: coma before the last closing bracket, this error is showing because you’re using a tuple and tuple receive coma after the last element or item in it.
Do this: plt.show(plt.imshow(X_train[3][0]),)