Это похоже на проблему пробелов: 5 строк, начинающихся с tgz_path = ...
, должны иметь отступ, чтобы они были частью функции fetch_housing_data()
.
import os
import tarfile
from six.moves import urllib
DOWNLOAD_ROOT ="https://raw.githubusercontent.com/ageron/handson-ml/master/"
HOUSING_PATH = os.path.join("datasets", "housing")
HOUSING_URL = DOWNLOAD_ROOT + "datasets/housing/housing.tgz"
def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):
if not os.path.isdir(housing_path):
os.makedirs(housing_path)
tgz_path = os.path.join(housing_path, "housing.tgz")
urllib.request.urlretrieve(housing_url, tgz_path)
housing_tgz = tarfile.open(tgz_path) # <-- not 'tgz.path'
housing_tgz.extractall(path=housing_path)
housing_tgz.close()
fetch_housing_data()
В противном случае интерпретатор выполнит tgz_path = os.path.join(housing_path, "housing.tgz")
вне метода, поэтому переменная housing_path
выйдет из области видимости, и вы получите ошибку.
ТАКЖЕ, tarfile.open(tgz.path)
выглядит как опечатка: должно быть tarfile.open(tgz_path)