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导致了雪豹的线程问题。更多信息请点击此处: