2009-10-27 6 views
2

urllib.urlopen을 호출 할 때 어떤 이유로 Trace/BPT 트랩 오류가 발생합니다. urlliburllib2을 모두 시도해 본 결과가 같습니다. 다음은 오류를 throw하는 코드입니다.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! 

이 코드는 web.py와 함께 CherryPy 웹 서버에서 실행 중임을 추가해야합니다.

누군가가 추적을 요청했습니다. 불행히도, 아무도 없습니다. 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

답변

3

문제를 해결 실.

+0

왜 이것이 필요합니까? –

+0

또한 답변으로 표시 할 수 없습니다. 누구든지 도와 줄 수 있습니까? –

+1

배경 스레드에서 CoreFoundation을로드하여 발생하는 Snow Leopard의 스레딩 문제인 것으로 보입니다. 더 많은 정보는 여기 : http://stackoverflow.com/questions/1540835/trace-bpt-trap-with-python-threading-module/1547316#1547316 –

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, 파이썬 2.6, CherryPy 3.1.2을 사용하고 0.33을 web.py하고 아래의 코드를 사용하여 문제를 재현 할 수있어 : 충분히에 문제를 재현하는

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 

이 코드를 너 끝? 그렇지 않은 경우 도움이되기 위해서는 더 많은 정보가 필요합니다. 는 urllib2가 모듈을 수입하는 것만으로는 충분하지 않습니다, 즉

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

하지만 당신은 실제로 주에서 오프너를 작성해야합니다 : 주요 파일의 맨 위에 다음 줄을 추가

+0

네, 10.6.1을 실행 중입니다. 스레드 외부에서 모듈을 가져 오는 방법은 무엇입니까? –

+0

나머지 파일이 어떻게 보이는지 알지 못하면 import 문을 get_url()에서 파일의 맨 위로 이동시켜 봅니다. – lemonad

+0

import 문을 맨 위로 이동했습니다. 아직 주사위가 없습니다. –