当前位置: 首页 > 面试题库 >

如何获得Python解释器堆栈的当前深度?

方梓
2023-03-14
问题内容

从文档中:

sys.getrecursionlimit()

返回递归限制的当前值,即Python解释器堆栈的最大深度。
此限制可防止无限递归导致C堆栈溢出和Python崩溃。可以通过setrecursionlimit()进行设置。

我目前在腌制对象时达到了递归限制。我正在腌制的对象只有几个层次的嵌套,所以我对正在发生的事情感到有些困惑。

我可以通过以下黑客措施来解决此问题:

try:
    return pickle.dumps(x)
except:
    try:
        recursionlimit = getrecursionlimit()
        setrecursionlimit(2*recursionlimit)
        dumped = pickle.dumps(x)
        setrecursionlimit(recursionlimit)
        return dumped
    except:
        raise

在不同的环境中测试以上代码片段有时会在第一个上获得成功try,有时会在第二个上获得成功try。到目前为止,我还无法将其设为raise例外。

为了进一步调试我的问题,有一种获取当前堆栈深度的方法将很有帮助。这将使我能够验证输入的堆栈深度是否正在确定上面的代码片段将在第一个try还是第二个上成功。

标准库是否提供获取堆栈深度的功能,否则,如何获得堆栈的深度?

def get_stack_depth():
    # what goes here?

问题答案:

您可以从中看到整个调用堆栈inspect.stack(),因此当前采用的深度为len(inspect.stack(0))

另一方面,我想当引发 “超出最大递归深度” 异常时,您可以打印出完整的堆栈。该堆栈跟踪应该向您确切显示出了什么问题。



 类似资料:
  • 问题内容: 如何获得Java中的当前堆栈跟踪,就像你可以在.NET中那样? 我找到了,但这不是我想要的-我想找回堆栈跟踪信息,而不是打印出来。 问题答案: 你可以使用。 这将返回一个数组,该数组代表程序的当前堆栈跟踪。

  • 问题内容: 我想知道是否有人可以指出有关解释用提取的Java线程堆栈的信息。 我的情况是我在GlassFish v2.1.1上运行了一个Java EE 5应用程序,该应用程序定期挂起(每天至少挂2次-3次)。要使其再次运行,我必须终止Glassfish进程并重新启动域。 。应用程序通常会变得越来越慢,直到最终完全挂起。一旦挂起,我将无法获得线程堆栈。我已经能够获得一个线程堆栈,因为它变得越来越慢,

  • 因此,我知道对堆栈中分配的变量调用会导致无效指针错误。 在ED指针中,在实际指针之前分配8个字节,以保留关于指针大小的信息。因此,我想知道是否在一个结构之前做了一个,然后在该结构上调用free,是否可以释放该结构(当然,这偏离了分配这8个字节是所做的唯一额外的事情的假设)。 我想我的最后一个问题是,堆栈变量分配和堆分配之间是否有真正的区别(就后端对内核的调用而言)。

  • 在为另一种语言构建解释器时,通常建议创建一个基于堆栈的虚拟机,该虚拟机可以解释实际解释器生成的字节码。然后,解释器将由两部分组成:翻译器,它将高级语言的指令转换为虚拟机的字节码,以及虚拟机本身。 我的问题是:口译语言有哪些替代方案?例如,跳过虚拟机并使用C中的函数实现所有指令是否可能(而且切实可行)?在某种程度上,在我看来这应该是可能的,但也许您最终会实现某种类型的最小VM,以实现更复杂的功能。还

  • 本文向大家介绍深入Python解释器理解Python中的字节码,包括了深入Python解释器理解Python中的字节码的使用技巧和注意事项,需要的朋友参考一下 我最近在参与Python字节码相关的工作,想与大家分享一些这方面的经验。更准确的说,我正在参与2.6到2.7版本的CPython解释器字节码的工作。 Python是一门动态语言,在命令行工具下运行时,本质上执行了下面的步骤:     当第一

  • 我是新的android,我想显示我当前的位置像“巴基斯坦拉合尔乔哈尔镇”。有什么需要帮忙的吗?

  • 问题内容: 在Python中获取当前系统状态(当前CPU,RAM,可用磁盘空间等)的首选方式是什么?* nix和Windows平台的奖励积分。 似乎有几种方法可以从我的搜索中提取出来: 使用PSI之类的库(目前似乎尚未积极开发并且在多个平台上不受支持)或pystatgrab之类的库(自2007年以来一直没有活动,它似乎也不支持Windows)。 使用特定于平台的代码,例如对于* nix系统使用a

  • 问题内容: 使用pyqt4和python 2.6,我正在使用qcombobox提供选项列表。我在使用所选选项时遇到问题。我已经能够使用的信号选择了该选项时触发的方法,但问题是,当用户点击运行,其中几个组合框的内容需要加以考虑。因此,基本上我需要将组合框的选定内容作为字符串获取。到目前为止,我只能使用此功能: 得到这个: 当我真正想要的只是“测试选择”位时,有什么想法吗?我的组合框是这样制作的: 问