如何找出Python卡在哪个循环中?

西伯斯赌博

我有一个.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循环。有没有简单的方法来弄清楚,很容易我真的很不愿意调试一个循环。

马丁·彼得斯(Martijn Pieters)

点击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繁忙的地方。追溯还告诉我,第一个bar()被称为,即foo(),所以我可以看到我们是如何到达那里的。

请注意,如果您有一个裸露的 except处理程序,则不一定有效;捕获所有的例外try: except:捕获KeyboardInterrupt了。始终except Exception:至少使用以防止捕获系统异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章