2

libcurl を使用して Web ページを DL しています。次に、データをスキャンして、リンクの 1 つを使用して何かを実行しています。ただし、たまにページが異なる場合があるため、悪いデータを抽出し、pycurl が例外をスローします。pycurl の例外名を見つけようとしましたが、うまくいきませんでした。

関数を実行するためのトレースバックを取得してファイルをダンプし、ファイル入力を見て、コードが間違っていたかどうかを確認する方法はありますか?

4

3 に答える 3

3

sys.excepthookは、グローバルな例外ハンドラーを設定できるここで役立ちます。バインディング ライブラリである pycurl 例外がどのように処理されるかはわかりませんが、おそらくジェネリック関数に再割り当てするとうまくいくでしょう。何かのようなもの:

>>> import sys
>>> 
>>> def my_global_exception_handler(type, value, traceback):
...     print traceback
...     sys.exit()
... 
>>> sys.excepthook = my_global_exception_handler
>>> raise
<traceback object at 0xb7cfcaa4>

この例外フック関数は、ダンプが必要なファイルにアクセスできるインスタンス メソッドである可能性があります。

于 2009-02-15T12:45:56.043 に答える
3

一般的な例外ハンドラを使用できます。

logging.basicConfig( file="someFile.log", level=logging.DEBUG )
logger= logging.getLogger( __name__ )
try:
    curl = pycurl.Curl()
    curl.setopt(pycurl.URL, url)
    # etc.
    curl.perform()
    curl.close
    logger.info( "Read %s", url )
except Exception, e:
    logger.exception( e )
    print e, repr(e), e.message, e.args
    raise
logging.shutdown()

これにより、探している例外情報を含む適切なログが書き込まれます。

于 2009-02-15T19:37:05.087 に答える
2

メイン ブロックのどこかですべての例外をキャッチし、コールバック情報に sys.exc_info() を使用して、それをファイルに記録できますか。exc_info() は、例外の種類だけでなく、トレースバックも呼び出すので、何が問題なのかという情報が得られるはずです。

于 2009-02-15T12:40:18.163 に答える