Trace / BPT trap beim Aufruf urllib.urlopen
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
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.