代码之家  ›  专栏  ›  技术社区  ›  Dan Loewenherz Snowman

调用urllib.urlopen时跟踪/bpt陷阱

  •  2
  • Dan Loewenherz Snowman  · 技术社区  · 15 年前

    出于某种原因,我在调用时遇到trace/bpt trap错误 urllib.urlopen . 我都试过了 urllib urllib2 结果相同。以下是引发错误的代码:

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

    我要补充的是,这段代码运行在一个cherrypy web服务器上。

    有人要求回溯。不幸的是,没有。 Trace/BPT trap 输出到终端,进程终止。例如。

    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 $
    

    编辑:我正在运行OSX10.6.2、Web.Py0.33、Python2.6.2和CherryPy3.1.2。

    2 回复  |  直到 15 年前
        1
  •  3
  •   udibr    15 年前

    在主文件顶部添加以下行解决了此问题:

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

    换句话说,仅仅导入urllib2模块是不够的,但是您实际上需要在主线程中创建opener。

        2
  •  2
  •   Community kfsone    7 年前

    你是在OSX10.6下运行的吗?很显然,线程和第一次导入模块在这里不能很好地配合。看看你不能在线程之外导入URLLIB2吗?

    在以下线程中还有一些详细信息: Trace/BPT trap with Python threading module

    我会尝试将urllib的导入移到同一个文件的顶部,或者,因为这似乎只是在线程中第一次导入模块时出现的问题,所以也可以将它导入到其他地方,比如与main()函数在同一个文件中。

    编辑: 您运行的是哪个版本的os x、python、cherrypy和web.py?我使用的是OS X5.5.8、Python 2.6、ChyYPy3.1.2和Web.Py 0.33,不能使用下面的代码来复制您的问题:

    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
    

    这段代码是否足以在您的端重现问题?如果没有,我需要更多的信息来帮助你。