Получение NameError в Python при получении данных в Jupyter - PullRequest
0 голосов
/ 26 июня 2018

Что может быть не так с этим скриптом, который выдает мне NameError, пожалуйста?

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)
housing_tgz.extractall(path=housing_path)
housing_tgz.close()

fetch_housing_data()

Это ошибка:

NameError Traceback (most recent call last)
tgz_path = os.path.join(housing_path, "housing.tgz")
 NameError: name 'housing_path' is not defined

1 Ответ

0 голосов
/ 26 июня 2018

Это похоже на проблему пробелов: 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)

...