Python 调用urllib.urlopen时跟踪/BPT陷阱

Python 调用urllib.urlopen时跟踪/BPT陷阱,python,trace,urllib2,urllib,web.py,Python,Trace,Urllib2,Urllib,Web.py,由于某种原因,我在调用urllib.urlopen时遇到跟踪/BPT陷阱错误。我尝试了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! 我应该补充一点,这段代码是在带有web.py的

由于某种原因,我在调用
urllib.urlopen
时遇到跟踪/BPT陷阱错误。我尝试了
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!
我应该补充一点,这段代码是在带有web.py的CherryPy web服务器上运行的

有人要求追踪。不幸的是,没有<代码>跟踪/BPT陷阱输出到终端,进程终止。例如

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 $

编辑:我运行的是OS X 10.6.2、web.py 0.33、Python 2.6.2和CherryPy 3.1.2。

您是在OS X 10.6下运行的吗?显然,线程和第一次导入模块在这里并不能很好地协同工作。查看是否无法在线程外部导入urllib2

以下线程中还有一些详细信息:

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

编辑:您正在运行哪些版本的OS X、Python、CherryPy和web.py?我正在使用OS X 10.5.8、Python 2.6、CherryPy 3.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

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

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

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

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

如果您加入一些回溯,这将非常有用。是的,我正在运行10.6.1。如何在线程之外导入模块?不知道文件的其余部分是什么样子,我会尝试将import语句从get_url()移到文件的顶部。只是将import语句移到了顶部。仍然没有骰子。你只有一个python文件还是几个?如果有几个函数,哪一个包含main()函数?它是否与您将import语句移到顶部的相同?如果没有,也将import语句添加到包含main()函数的文件中。我将继续并尝试在index.py文件中导入模块。我会及时更新。而且,我似乎无法将此标记为答案。有人能帮忙吗?似乎是因为在后台线程上加载CoreFoundation导致了雪豹的线程问题。更多信息请点击此处: