Pergunta

Por alguma razão eu estou recebendo um erro armadilha Trace / BPT ao chamar urllib.urlopen. Eu tentei tanto urllib e urllib2 com resultados idênticos. Aqui está o código que gera o erro:

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

Gostaria de acrescentar que este código está sendo executado em um servidor web CherryPy com web.py.

Alguém pediu um rastreamento. Infelizmente, não há nenhuma. Trace/BPT trap é transmitido para o terminal e o processo termina. Por exemplo.

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:. Estou executando o OS X 10.6.2, web.py 0,33, Python 2.6.2, e CherryPy 3.1.2

Foi útil?

Solução

Adicionando as seguintes linhas no topo do arquivo principal resolveu o problema:

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

Em outras palavras, não é o suficiente para importar o módulo urllib2, mas você realmente precisa para criar o abridor no segmento principal.

Outras dicas

Você está executando este sob OS X 10.6? Aparentemente tópicos e módulos importadores pela primeira vez não joga bem juntos lá. Veja se você não pode importar urllib2 fora da linha?

Existem algumas mais detalhes no seguinte discussão: Trace / BPT armadilha com Python rosqueamento módulo

Eu tentaria se movendo a importação de urllib ao topo do mesmo arquivo ou, uma vez que parece ser um problema apenas com a importação de um módulo pela primeira vez em um segmento, importá-lo em outro lugar também, como no mesmo arquivo como sua função main ().

Editar: Que versões do OS X, Python, CherryPy e web.py você está correndo? Estou usando OS X 10.5.8, Python 2.6, CherryPy 3.1.2 e web.py 0,33 e não pode reproduzir o problema usando o código abaixo:

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

É este o suficiente código para reproduzir o problema no seu fim? Se não, eu preciso de mais informações, a fim de ser de ajuda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top