1

我有一个.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

不知道它卡在哪里,因为我有几个whilefor循环。有什么简单的方法可以很容易地弄清楚吗?我真的不愿意逐个调试一个循环。

4

1 回答 1

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

回溯foo在第 5 行结束。这是我中断程序时 Python 正忙的地方。回溯还告诉我 firstbar()被调用,which 被调用foo(),所以我可以看到我们是如何到达那里的。

请注意,如果您有一个 except处理程序,这不一定有效;也用catch捕获所有异常。始终至少使用以防止捕获系统异常。try: except:KeyboardInterruptexcept Exception:

于 2013-09-22T08:38:20.493 回答