Stackoverflow/Python

[Python] module 'urllib' has no attribute 'request'

The Neo 2022. 1. 11. 09:44

파이썬에 관련된 코드를 실행 도중, urllib에서 에러가 발생하였다. 

 

실행코드

import os
import tarfile
import urllib

DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/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):
    os.makedirs(housing_path, exist_ok=True)
    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(HOUSING_URL, HOUSING_PATH)

 

에러내용

Traceback (most recent call last):
  File "D:/Study/Python/study01.py", line 18, in <module>
    fetch_housing_data(HOUSING_URL, HOUSING_PATH)
  File "D:/Study/Python/study01.py", line 13, in fetch_housing_data
    urllib.request.urlretrieve(housing_url, tgz_path)
AttributeError: module 'urllib' has no attribute 'request'

 

스택오버플로우 관련 내용

urllib에 관련 내용

 

내용을 보면, urllib의 _init_.py가 비어 있어서, urllib만 생성해서는 액세스를 할 수 없다는 의미이다. 즉, 이런 경우 urllib 다음의 request까지 import로 선언해야 된다는 의미였다.

 

수정 부분

import urllib.request as urllib

urllib.urlretrieve(housing_url, tgz_path)

urllib.request을 import 하였고, urllib.request.urlretrieve를 urllib.urlretrieve로 변환하니 이상없이 동작하였다.

 

반응형