Python3のスクリプトを数時間動かしたあとにエラーで落ちるという経験はないでしょうか。エラーが発生したら pdb と呼ばれるデバッガが起動するようにしておくと、エラーの究明に役立ちます。
例えば、以下のような script.py があったとします。
def main(): a = 10 b = 0 print(a / b) main()
このスクリプトを $ python3 script.py
と普通に実行すると、以下のようにゼロ除算エラーが発生し、異常終了してしまいます。
$ python script.py Traceback (most recent call last): File "script.py", line 7, in <module> main() File "script.py", line 4, in main print(a / b) ZeroDivisionError: integer division or modulo by zero
ここで、
$ python3 -m pdb -c continue script.py
というふうに、-m pdb -c continue
をつけてスクリプトを実行すると、以下のように、エラーが発生した地点でデバッガが起動します。
$ python3 -m pdb -c continue script.py Traceback (most recent call last): File "/usr/lib/python3.6/pdb.py", line 1667, in main pdb._runscript(mainpyfile) File "/usr/lib/python3.6/pdb.py", line 1548, in _runscript self.run(statement) File "/usr/lib/python3.6/bdb.py", line 434, in run exec(cmd, globals, locals) File "<string>", line 1, in <module> File "/home/user/script.py", line 1, in <module> def main(): File "/home/user/script.py", line 4, in main print(a / b) ZeroDivisionError: division by zero Uncaught exception. Entering post mortem debugging Running 'cont' or 'step' will restart the program > /home/user/script.py(4)main() -> print(a / b) (Pdb)
あとは、pdbを使って自由に原因究明できます。
(Pdb) print(a) 10 (Pdb) print(b) 0