22

pdb にいるとき/pdb に入る前に最後の例外を調べる方法はありますか? (python 2.7.5 を使用)。

コードで例外が発生した直後に (そうです、他のコマンドはまったく入力しません)、私は実行しsys.exc_info()ます。これは単に結果になり(None, None, None)ます。この時点で、実行できpdb.pm()、例外が発生した時点で pdb が開始されます。

この例外オブジェクトを調べられるようにしたいと思います (発生する前に変数に格納されません)。

http://docs.python.org/2/library/pdb.htmlまたはhttp://docs.python.org/2/library/sys.htmlには明らかに役立つものはありません

編集:私は知っていset_traceます。コードを変更する前に、例外を調べたいと思います。

4

5 に答える 5

12

これはあなたが探しているものですか?

import pdb
try:
    1/0
except Exception as err:
    pdb.set_trace()

% test.py
--Return--
> /home/unutbu/pybin/test.py(8)<module>()->None
-> pdb.set_trace()
(Pdb) err
ZeroDivisionError('integer division or modulo by zero',)
(Pdb) quit

例外が発生したコードを変更したくない場合は、代わりに次のように再定義できますsys.excepthook

import pdb
import sys
def excepthook(type, value, traceback):
    pdb.set_trace()
sys.excepthook = excepthook

1/0

% test.py
--Return--
> /home/unutbu/pybin/test.py(7)excepthook()->None
-> pdb.set_trace()
(Pdb) type
<type 'exceptions.ZeroDivisionError'>
(Pdb) value
ZeroDivisionError('integer division or modulo by zero',)
(Pdb) traceback
<traceback object at 0xb774f52c>
(Pdb) 
于 2013-10-06T16:24:18.557 に答える
11

次の方法で pdb/ipdb の最新の例外を取得できます。

__exception__

上記は実際には (exception, message) のタプルです。

于 2018-03-29T19:53:19.603 に答える
1

pdb経由でスクリプトを実行できますpython -m pdb -c continue script.py。キャッチされていない例外で事後分析デバッグに入り、pdb インターフェイスにドロップします。sys.exc_info()ここで、例外を取得するために調べることができます。例えば:

$ echo "1 / 0" > script.py 
$ python -m pdb -c continue script.py 
Traceback (most recent call last):
  [...]
  File "/tmp/script.py", line 1, in <module>
    1 / 0
ZeroDivisionError: division by zero
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
> /tmp/script.py(1)<module>()
-> 1 / 0
(Pdb) !import sys
(Pdb) p sys.exc_info()
(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero'), <traceback object at 0x7f3adcf09148>)
(Pdb) interact
*interactive*
>>> import sys
>>> sys.exc_info()
(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero'), <traceback object at 0x7f3adcf09148>)
于 2019-10-28T13:21:40.623 に答える