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