出于某种原因,我在调用urllib.urlopen
时收到了Trace / 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网络服务器上运行。
有人要求追溯。不幸的是,没有。 Trace/BPT trap
被输出到终端并且该过程终止。 E.g。
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。
答案 0 :(得分:3)
将以下行添加到主文件的顶部解决了问题:
import urllib2
urllib2.install_opener(urllib2.build_opener())
换句话说,导入urllib2模块是不够的,但实际上你需要在主线程中创建开启工具。
答案 1 :(得分:2)
你是在OS X 10.6下运行吗?显然,第一次使用线程和导入模块并不能很好地协同工作。看看你是否不能在线程之外导入urllib2?
以下主题中还有一些细节:Trace/BPT trap with Python threading module
我尝试将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
此代码是否足以重现您的问题?如果没有,我需要更多信息才能提供帮助。