urllib 모듈은 request
함수는 Python 3에서 액세스됩니다. 즉, Python 2에서 수행하는 방식으로 "urlopen" 함수를 참조하려고 하면 "AttributeError:'module' 개체에 'urlopen' 속성이 없습니다." 오류가 발생합니다. .
이 가이드에서는 이 오류의 의미와 발생 이유에 대해 설명합니다. 이 오류의 예를 살펴보고 해결 방법을 배울 수 있습니다.
AttributeError:'module' 개체에 'urlopen' 속성이 없습니다.
"urllib" 모듈은 URL 열기 및 웹사이트에서 데이터 읽기와 관련된 여러 기능을 제공합니다. 이 라이브러리를 사용하는 구문은 Python 2와 Python 3에서 다릅니다.
Python 2에서 "urlopen"은 "urllib" 모듈의 일부입니다. 즉, urllib.urlopen을 사용하여 코드로 가져올 수 있습니다. Python 3에서 "urlopen"은 "urllib" 메서드 내 "요청" 모듈의 일부입니다.
- 파이썬 2:urllib -> urlopen
- 파이썬 3:urllib -> 요청 -> urlopen
"요청" 모듈은 "urllib" 패키지의 많은 웹 요청 기능이 번들로 제공되는 곳입니다. 해당 속성이 포함되지 않은 모듈에서 속성에 액세스하려고 하면 AttributeErrors가 발생합니다. 이 경우 "urlopen"은 "urllib" 모듈의 일부가 아닙니다.
예시 시나리오
JSONPlaceholder라는 서비스에서 데이터를 검색하는 프로그램을 빌드하십시오. 이 서비스는 예제에 사용할 수 있는 더미 데이터를 제공합니다.
ID가 #2인 단일 게시물을 검색합니다. 시작하려면 urllib 모듈을 가져옵니다.
import urllib
이 명령문을 사용하면 프로그램의 "urllib" 모듈 내에서 함수를 사용할 수 있습니다.
참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.
부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.
그런 다음 "urlopen"을 사용하여 요청합니다. 이렇게 하면 JSONPlaceholder API의 끝점에서 데이터를 검색할 수 있습니다.
data = urllib.urlopen("https://jsonplaceholder.typicode.com/posts/2") contents = data.read() print(as_json)
이 코드는 JSONPlaceholder API에서 ID가 #2인 게시물에 대한 데이터를 읽습니다.
이 코드는 JSON 문자열 형식의 요청 응답을 print 문을 사용하여 콘솔에 출력합니다. 코드를 실행하고 어떤 일이 일어나는지 확인하십시오.
Traceback (most recent call last): File "main.py", line 4, in <module> data = urllib.urlopen("https://jsonplaceholder.typicode.com/posts/2") AttributeError: module 'urllib' has no attribute 'urlopen'
프로그램이 오류를 반환합니다.
해결책
Python 2 구문을 사용하여 "urlopen" 메서드에 액세스하고 있습니다. "urlopen"은 Python 3에서 "urllib"의 속성이 아닙니다. "urlopen"을 "urllib"의 속성으로 참조하므로 프로그램이 제대로 실행되지 않습니다.
이 문제를 해결하려면 "urllib" 모듈에서 "request" 모듈을 가져옵니다. 이 모듈에는 "urlopen" 메서드가 포함되어 있습니다.
import urllib.request
다음으로 JSONPlaceholder API에서 데이터를 검색할 때 urllib.request 모듈을 참조하도록 코드를 변경합니다.
data = urllib.request.urlopen("https://jsonplaceholder.typicode.com/posts/2") contents = data.read().decode('utf-8') print(contents)
이 코드는 우리가 호출하는 API 엔드포인트의 내용을 읽을 것입니다. 코드를 실행해 보겠습니다.
{ "userId": 1, "id": 2, "title": "qui est esse", "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla" }
decode()
를 사용하여 수신한 응답을 디코딩했습니다. 방법. urlopen()
에서 반환된 값을 읽을 수 있도록 이 작업을 수행합니다. 메소드를 문자열로.
결론
"urlopen" 함수는 Python 3에서 "urllib"의 객체가 아닙니다. 이 함수에 액세스하려면 "urllib.request"를 코드로 가져오고 urllib.request.urlopen()
함수.
이제 전문가처럼 이 Python 오류를 수정하는 데 필요한 지식을 얻었습니다!