Frage

Aus irgendeinem Grund Ich erhalte eine Trace / BPT Trapfehler wenn urllib.urlopen Aufruf. Ich habe beide urllib und urllib2 versucht, mit identischen Ergebnissen. Hier ist der Code, der den Fehler wirft:

def get_url(url):
    from urllib2 import urlopen
    if not url or not url.startswith('http://'): return None
    return urlopen(url).read() # FIXME!

Ich sollte hinzufügen, dass dieser Code auf einem Webserver mit CherryPy web.py ausgeführt wird.

Jemand bat um eine Rückverfolgung. Leider gibt es keine. Trace/BPT trap ist mit dem Anschluß ausgegeben wird, und der Prozeß endet. Z.

dloewenherz@andros project $ sudo ./index.py 80
http://0.0.0.0:80/
# Here I visit the page which contains the get_url(url) method
Trace/BPT trap
dloewenherz@andros project $

Edit:. Ich bin mit OS X 10.6.2, web.py 0.33, Python 2.6.2 und 3.1.2 CherryPy

War es hilfreich?

Lösung

Das Hinzufügen der folgenden Zeilen an der Spitze der Hauptdatei hat das Problem gelöst:

import urllib2
urllib2.install_opener(urllib2.build_opener())

Mit anderen Worten, es ist nicht genug, um das urllib2 Modul zu importieren, aber Sie müssen tatsächlich den Opener im Hauptthread erstellen.

Andere Tipps

Sind Sie mit dieser unter OS X 10.6? Offenbar Fäden und Import-Module zum ersten Mal nicht gut zusammen dort spielen. Sehen Sie, wenn Sie können nicht importieren urllib2 außerhalb des Threads?

Es gibt ein paar mehr Details in der folgenden Threads: Trace / BPT trap mit Python threading Modul

Ich würde versuchen, entweder den Import von urllib an die Spitze der gleichen Datei zu bewegen oder, da es nur ein Problem zu sein scheint, in einem Thread ein Modul zum ersten Mal mit dem Import, importieren Sie es woanders auch, wie in der gleichen Datei wie Ihre Funktion main ().

Edit: Welche Versionen von OS X, Python, CherryPy und web.py sind Sie? Ich bin mit OS X 10.5.8, Python 2.6, CherryPy 3.1.2 und web.py 0.33 und kann Ihr Problem mit dem folgenden Code nicht reproduzieren:

import web

urls = (
  '/', 'index'
)

app = web.application(urls, globals())

class index:
    def GET(self):
        from urllib2 import urlopen
        return urlopen("http://google.se/").read()

if __name__ == "__main__": app.run()


$ sudo python index.py 80
http://0.0.0.0:80/
127.0.0.1:59601 - - [08/Nov/2009 09:46:40] "HTTP/1.1 GET /" - 200 OK
127.0.0.1:59604 - - [08/Nov/2009 09:46:40] "HTTP/1.1 GET /extern_js/f/CgJzdhICc2UgACswCjhBQB0sKzAOOAksKzAYOAQsKzAlOMmIASwrMCY4BSwrMCc4Aiw/dDWkSd2jmF8.js" - 404 Not Found
127.0.0.1:59601 - - [08/Nov/2009 09:46:40] "HTTP/1.1 GET /logos/elmo-hp.gif" - 404 Not Found
127.0.0.1:59601 - - [08/Nov/2009 09:46:40] "HTTP/1.1 GET /images/nav_logo7.png" - 404 Not Found

Ist dieser Code, um das Problem an Ihrem Ende zu reproduzieren? Wenn nicht, ich brauche mehr Informationen, um Hilfe zu sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top