対話プロンプト(REPL)でPythonのコードをデバッグする場合、多くの場合、私は例外を発生させ、いくつかのコードを記述しますが、私はtry
/except
でそれをラップしていないので、エラーが発生したら、私は永遠にしました例外オブジェクトを失った。Pythonプロンプトでエラーが発生した後に最後の例外オブジェクトを取得するには?
多くの場合、Pythonが出力するトレースバックとエラーメッセージが十分ではありません。たとえば、URLを取得する場合、サーバーは40倍のエラーを返し、error.read()
...を介してレスポンスの内容が必要になりますが、エラーオブジェクトはもうありません。例:
>>> import urllib2
>>> f = urllib2.urlopen('http://example.com/api/?foo=bad-query-string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
...
urllib2.HTTPError: HTTP Error 400: Bad Request
Drat、応答の本体は何といっていますか?それはおそらく、私はそれを除いてのtry /に包まれた再実行してコードに通常は簡単です実現するが、それは理想的ではないのです...それに
を貴重なエラー情報を持っていました。私は、この特定のケースでは、requests
ライブラリ(HTTPエラーを発生させない)を使用していた場合、この問題は発生しないと考えています...しかし、もっと一般的な方法があるかどうかは本当に不思議ですこれらのケースでは、Pythonプロンプトの最後の例外オブジェクトです。
非常に素晴らしい、ありがとうございました!文書化されているとおりに動作します。私のGoogleの検索ではそれを見つけられなかったというのは奇妙ですが、まあまあです。 (かなり味付けされたPython開発者であるにもかかわらず、Pythonまたはその標準ライブラリについて毎日何かを学んでいます...) –
@BenHoyt FYIは、 'sys'のドキュメンテーションに従って、"これらの3つは、トレースバックが印刷されました。 " – satoru
@satoruまあ、明らかに。通常のプログラムでは、未処理の例外がプログラムを終了します。 – Cairnarvon