Pregunta

Por alguna razón, recibo un error de trampa Trace / BPT cuando llamo a urllib.urlopen . He probado tanto urllib como urllib2 con resultados idénticos. Aquí está el código que arroja el error:

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

Debo agregar que este código se ejecuta en un servidor web CherryPy con web.py.

Alguien solicitó un rastreo. Lamentablemente, no hay ninguno. Trace / BPT trap se envía al terminal y el proceso finaliza. Por ejemplo,

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 $

Editar: estoy ejecutando OS X 10.6.2, web.py 0.33, Python 2.6.2 y CherryPy 3.1.2.

¿Fue útil?

Solución

Agregar las siguientes líneas en la parte superior del archivo principal resolvió el problema:

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

En otras palabras, no es suficiente importar el módulo urllib2, pero en realidad necesita crear el abridor en el hilo principal.

Otros consejos

¿Está ejecutando esto en OS X 10.6? Aparentemente, los hilos y los módulos de importación por primera vez no funcionan bien juntos allí. ¿Ves si no puedes importar urllib2 fuera del hilo?

Hay algunos detalles más en el siguiente hilo: Trace / BPT trap con módulo de subprocesamiento de Python

Intentaría mover la importación de urllib a la parte superior del mismo archivo o, dado que parece ser un problema solo con importar un módulo por primera vez en un hilo, importarlo también en otro lugar, como en el mismo archivo que su función main ().

Editar: ¿Qué versiones de OS X, Python, CherryPy y web.py está ejecutando? Estoy usando OS X 10.5.8, Python 2.6, CherryPy 3.1.2 y web.py 0.33 y no puedo reproducir su problema usando el siguiente código:

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

¿Es este código suficiente para reproducir el problema en su extremo? Si no, necesito más información para poder ayudarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top