質問

何らかの理由で、 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 が端末に出力され、プロセスが終了します。例:

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を実行しています。

役に立ちましたか?

解決

メインファイルの先頭に次の行を追加すると、問題が解決しました。

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

つまり、urllib2モジュールをインポートするだけでは十分ではありませんが、実際にはメインスレッドでオープナーを作成する必要があります。

他のヒント

OS X 10.6でこれを実行していますか?どうやら、スレッドと初めてモジュールをインポートすることは、そこではうまく機能しません。スレッドの外部でurllib2をインポートできないかどうかを確認しますか?

次のスレッドにはさらに詳細があります: Trace / BPT trap Pythonスレッドモジュールを使用

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

このコードはあなたの側で問題を再現するのに十分ですか?そうでない場合、私は助けになるためにより多くの情報が必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top