我有一个.py
文件,其中包含许多功能。现在我正在调试代码并发现有时程序卡在某处。
如果我将它留在那里并等待超长时间,则会显示错误消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 9, in generate
File "<stdin>", line 7, in choosePath
MemoryError
我不知道它被卡住了,因为我有几个while
和for
循环。有没有简单的方法可以轻易找出 ?我觉得我不愿意再调试一个循环。
答案 0 :(得分:9)
点击 CTRL-C 并查看回溯。
例如,以下代码将触及一个永无止境的循环:
import time
def foo():
while True:
time.sleep(1)
def bar():
for i in range(10):
foo()
bar()
当我打断它时,我看到:
$ bin/python endless_demo.py
^CTraceback (most recent call last):
File "test.py", line 11, in <module>
bar()
File "test.py", line 9, in bar
foo()
File "test.py", line 5, in foo
time.sleep(1)
KeyboardInterrupt
回溯在第5行的foo
结束。这是我在打断程序时忙碌的地方。追溯还告诉我,第一个bar()
被调用,称为foo()
,所以我可以看到我们是如何到达那里的。
请注意,如果您有一个裸 except
处理程序,那么这不一定有效;通过try:
except:
抓取所有例外也会抓住KeyboardInterrupt
。始终至少使用except Exception:
来防止捕获系统异常。