Question

Pour une raison quelconque, je reçois une erreur d'interruption Trace / BPT lors de l'appel de urllib.urlopen . J'ai essayé à la fois urllib et urllib2 avec des résultats identiques. Voici le code qui lève l'erreur:

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

Je dois ajouter que ce code est exécuté sur un serveur Web CherryPy avec web.py.

Quelqu'un a demandé une trace. Malheureusement, il n'y en a pas. La trappe / trace BPT est transmise au terminal et le processus se termine. Ex.

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 $

Éditer: J'utilise OS X 10.6.2, web.py 0.33, Python 2.6.2 et CherryPy 3.1.2.

Était-ce utile?

La solution

L'ajout des lignes suivantes en haut du fichier principal a résolu le problème:

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

En d'autres termes, il ne suffit pas d'importer le module urllib2 mais vous devez en fait créer le programme d'ouverture dans le thread principal.

Autres conseils

Utilisez-vous cette application sous OS X 10.6? Apparemment, les threads et les modules importés pour la première fois ne fonctionnent pas bien ensemble. Voyez si vous ne pouvez pas importer urllib2 en dehors du fil?

Le fil suivant contient quelques détails supplémentaires: Trace / BPT trap avec le module de threading Python

Je voudrais essayer de déplacer l'importation d'urllib vers le haut du même fichier ou, vu que cela semble poser un problème uniquement lors de l'importation d'un module pour la première fois dans un thread, importez-le ailleurs, comme dans le même fichier que votre fonction main ().

Modifier: Quelles versions d'OS X, Python, CherryPy et web.py utilisez-vous? J'utilise OS X 10.5.8, Python 2.6, CherryPy 3.1.2 et web.py 0.33. Je ne peux pas reproduire votre problème à l'aide du code ci-dessous:

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

Ce code est-il suffisant pour reproduire le problème de votre côté? Sinon, j'ai besoin de plus d'informations pour pouvoir vous aider.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top