2009-10-27 42 views
2

由於某些原因,我在調用urllib.urlopen時遇到跟蹤/ BPT陷阱錯誤。我試過urlliburllib2,結果相同。下面是引發錯誤的代碼:調用urllib.urlopen時跟蹤/ BPT陷阱

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.py.此代碼運行

有人要求回溯。不幸的是,沒有。 Trace/BPT trap被輸出到終端並且該過程終止。例如。

[email protected] 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 
[email protected] project $ 

編輯:我運行OS X 10.6.2,web.py 0.33,Python 2.6.2和CherryPy 3.1.2。

+2

如果你放入回溯的某個部分,這將會很有幫助。 – Omnifarious 2009-10-27 05:44:16

回答

3

添加以下行主文件的頂部解決了這個問題:

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

換句話說,這是不夠的,進口的urllib2模塊,但你確實需要創建主開門紅線。

+0

這是爲什麼這是必需的? – 2009-11-14 00:49:00

+0

另外,我似乎無法將此標記爲答案。任何人都可以幫忙嗎? – 2009-11-14 00:51:26

+1

似乎是由在後臺線程上加載CoreFoundation引起的Snow Leopard導致的線程問題。更多信息在這裏:http://stackoverflow.com/questions/1540835/trace-bpt-trap-with-python-threading-module/1547316#1547316 – 2009-11-28 21:50:15

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 

這段代碼足以上重現問題你的結局?如果不是,我需要更多信息才能獲得幫助。

+0

是的,我正在運行10.6.1。我將如何去導入線程之外的模塊? – 2009-10-27 06:40:03

+0

不知道文件的其餘部分是怎麼樣的,我試着將import語句從get_url()移出到文件的頂部。 – lemonad 2009-10-27 06:54:35

+0

剛剛將導入語句移到頂部。仍然沒有骰子。 – 2009-11-01 17:34:39