Debugging 当存在无限递归异常时,Pycharm无法在断点处停止

Debugging 当存在无限递归异常时,Pycharm无法在断点处停止,debugging,recursion,pycharm,breakpoints,Debugging,Recursion,Pycharm,Breakpoints,下面是我的源代码: def infinite_recursion(i): return infinite_recursion(i) def index_out_of_range(): arr = [1, 2, 3] print arr[3] def foo(): try: infinite_recursion(1) except: pass print 1 def bar(): try:

下面是我的源代码:

def infinite_recursion(i):
    return infinite_recursion(i)


def index_out_of_range():
    arr = [1, 2, 3]
    print arr[3]


def foo():
    try:
        infinite_recursion(1)
    except:
        pass

    print 1


def bar():
    try:
        index_out_of_range()
    except:
        pass

    print 2

if __name__ == '__main__':
    foo()
当我尝试用Pycharm调试它时,我在函数“foo”中的行“print 1”处设置了一个断点。然后我在Pycharm中执行调试过程,最后,它没有在断点处停止,这很奇怪

然后,我更改源代码,并在函数“栏”中的“打印2”行设置断点,并从

if __name__ == '__main__':
    foo()

这一次,Pycharm可以在断点处停止


有人能找出根本原因吗?在无限递归异常之后,Pycharm调试器似乎无法工作。

哼哼,事实上,我在
Python 3
中再现了这一点:在正常模式下运行代码会在控制台中打印
1
,在调试中运行它会导致
致命Python错误:无法从堆栈溢出中恢复。
这可能与调试器在堆栈中添加额外调用有关,使其在达到
最大递归深度之前溢出。无论如何,出于好奇,我希望我们同意您应该修复代码,而不是试图从中恢复。我的Python版本是2.7.10,当调试这些代码时,它不会像Python 3那样发出错误消息。它只是继续运行并将
1
打印到控制台。你是对的,我应该修改我的代码以避免无限递归,但这段代码只是一个重现问题的示例。实际代码非常复杂,很难检测到无限递归。我希望Pycharm将来能解决这个问题。
if __name__ == '__main__':
    bar()