【发布时间】:2013-02-21 14:22:59
【问题描述】:
我正在使用搁置模块为我的程序添加一些持久性。起初我在搁置中使用默认的 bsddb,但我不得不将其更改为 gdbm,然后发生异常:
Exception RuntimeError: 'maximum recursion depth exceeded in __subclasscheck__' in <type 'exceptions.AttributeError'> ignored
它似乎是由一些 whichdb 调用在 anydbm 模块中引发(并捕获)的。
它没有什么不好的,因为代码完成时没有问题,但它看起来有点糟糕。据我所知,我可以使用警告模块来禁止打印,但是我想完全删除异常。
我正在查看其他地方的类似问题(它们发生在 pylint、django 和其他一些模块/包中)并且似乎在任何地方都被标记为“错误”。有没有人想出解决任何dbm / shelve模块中这种行为的方法?
编辑1。 我发现导致此错误的原因是: def getattr(self, attr): 返回 getattr(self.config, attr)
我正在尝试将包装另一个类的类保存到搁置中 - 这就是 getattr 函数被覆盖的原因。有没有办法写不死循环?
【问题讨论】:
-
如果这发生在库中(看起来像这样),值得让作者知道。可能是一个错误,对吧?我的意思是,如果不完全确定永远不会满足递归限制,则不应在 Python 中实现递归。
-
是的,没错。我仍在寻找解决此错误的方法。你知道我是否可以抑制 RuntimeError 异常打印吗?警告模块不起作用(因为它不是警告而是异常),我在这里很困惑。我认为该程序的用户不会希望在每次启动产品时都看到异常。
标签: python runtime-error shelve