Dies ist mein drittes Python-Projekt und ich habe eine Fehlermeldung erhalten: 'module object' is not callable.

Ich weiß, dass dies bedeutet, dass ich eine Variable oder Funktion falsch referenziere. Aber Versuch und Irrtum konnten mir nicht helfen, dieses Problem zu lösen.

import urllib

def get_url(url):
    '''get_url accepts a URL string and return the server response code, response headers, and contents of the file'''
    req_headers = {
        'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13',
        'Referer': 'http://python.org'}

    #errors here on next line
    request = urllib.request(url, headers=req_headers) # create a request object for the URL
    opener = urllib.build_opener() # create an opener object
    response = opener.open(request) # open a connection and receive the http response headers + contents

    code = response.code
    headers = response.headers # headers object
    contents = response.read() # contents of the URL (HTML, javascript, css, img, etc.)
    return code , headers, contents


testURL = get_url('http://www.urlhere.filename.zip')
print ("outputs: %s" % (testURL,))

Ich habe diesen Link als Referenz verwendet: http://docs.python.org/release/3.0.1 /library/urllib.request.html

Rückverfolgung:

Traceback (most recent call last):
  File "C:\Project\LinkCrawl\LinkCrawl.py", line 31, in <module>
    testURL = get_url('http://www.urlhere.filename.zip')
  File "C:\Project\LinkCrawl\LinkCrawl.py", line 21, in get_url
    request = urllib.request(url, headers=req_headers) # create a request object for the URL
TypeError: 'module' object is not callable
6
danielpiestrak 7 Okt. 2012 im 23:38

3 Antworten

Beste Antwort

In Python 3 ist das Objekt urllib.request ein Modul. Sie müssen Objekte aufrufen, die in diesem Modul enthalten sind. Dies ist eine wichtige Änderung gegenüber Python 2, wenn Sie Beispielcode verwenden, müssen Sie dies berücksichtigen.

Erstellen Sie beispielsweise das Objekt Request und den Öffner:

request = urllib.request.Request(url, headers=req_headers)
opener = urllib.request.build_opener()
response = opener.open(request)

Lesen Sie die Dokumentation sorgfältig durch.

15
Martijn Pieters 7 Okt. 2012 im 19:41

urllib.request ist ein Modul. urllib.request.Request ist eine Klasse. Das Aufrufen eines Moduls wie derzeit führt zu einem Fehler. Sie möchten die Klasse wahrscheinlich folgendermaßen aufrufen:

request = urllib.request.Request(url, headers=req_headers)  # create a request object for the URL

Sie möchten wahrscheinlich auch {verwenden {X0}} von urllib.request statt nur urllib:

opener = urllib.request.build_opener()  # create an opener object
5
icktoofay 7 Okt. 2012 im 19:41

Dies tritt auch auf, wenn Sie die Rückgabemethode durch Annotieren mit @property als Eigenschaftsmethode deklariert haben.

0
SurajKj 25 Jän. 2019 im 05:14