Python 2到Python 3:TypeError:’module’对象不可调用

Python 2 to Python 3 : TypeError: 'module' object is not callable

本问题已经有最佳答案,请猛点这里访问。

我正在尝试修改一个用Python2语言编写的代码,该代码使用URLLIB2模块编写。我确实用Python3中的URLLIB2模块修改了我的代码,但我得到了一个错误:

1
2
3
req = urllib.request(url)

TypeError: 'module' object is not callable

我在这里做错什么了?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import urllib.request
import json
import datetime
import csv
import time

app_id ="172"
app_secret ="ce3"


def testFacebookPageData(page_id, access_token):

    # construct the URL string
    base ="https://graph.facebook.com/v2.4"
    node ="/" + page_id
    parameters ="/?access_token=%s" % access_token
    url = base + node + parameters

    # retrieve data
    req = urllib.request(url)
    response = urllib.urlopen(req)
    data = json.loads(response.read())

    print (json.dumps(data, indent=4, sort_keys=True))


更改线条

1
2
req = urllib.request(url)
response = urllib.urlopen(req)

到:

1
2
req = urllib.request.Request(url)
response = urllib.request.urlopen(req)

您可以在此模块中找到更多信息**https://docs.python.org/3/library/urlib.request.html_urlib.request.request**https://docs.python.org/3/library/urlib.request.html_urlib.request.urlopen


urllib.request是一个模块。你在22号线给模块打电话…

1
req = urllib.request(url)

要修复,请执行以下操作:

1)顶部导入:

1
from urllib.request import urlopen

2)然后将url传递给urlopen(url)

1
2
3
# remove this line req = urllib.request(url)
response = urlopen(url)
data = json.loads(response.read())

3)见类似错误。类型错误:"模块"对象不可调用


@克瓦马赫什的回答是绝对正确的。我将提供一个支持这两个版本的替代解决方案。使用python的requests库进行调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import requests
import json
import datetime
import csv
import time

app_id ="172"
app_secret ="ce3"


def testFacebookPageData(page_id, access_token):

    # construct the URL string
    base ="https://graph.facebook.com/v2.4"
    node ="/" + page_id
    parameters ="/?access_token=%s" % access_token
    url = base + node + parameters

    # retrieve data
    response = requests.get(url)
    data = json.loads(response.text())

    print (json.dumps(data, indent=4, sort_keys=True))

详细使用请求:python requests文档