在Plone中解开未发现的错误并查看其真正的异常

在Plone中解开未发现的错误并查看其真正的异常,plone,zope,Plone,Zope,以下内容来自Zope的BaseRequest.py: # traverseName() might raise ZTK's NotFound except (KeyError, AttributeError, ztkNotFound): if response.debug_mode: return response.debugError(

以下内容来自Zope的BaseRequest.py:

            # traverseName() might raise ZTK's NotFound
            except (KeyError, AttributeError, ztkNotFound):

                if response.debug_mode:
                    return response.debugError(
                        "Cannot locate object at: %s" % URL)
                else:
                    return response.notFoundError(URL)
它将各种异常转换为未找到页面。这对网站开发者来说是非常糟糕的,他们不知道网站到底出了什么问题

如何禁用此机制,显然是response.debug_模式,这样您就可以看到真正的异常

当Plone在调试模式下运行时

单元测试和功能测试

当Plone在生产模式下运行时,例如,临时查看某些URL确实失败的原因


既然您已经找到了有问题的代码,您应该已经看到没有这样的开关。为什么不为Zope提交一个功能请求呢?使用ZCML布线、猴子补丁等,你永远不知道触发器是否隐藏在某个地方:FR那么它应该是。KeyError和AttributeError可能发生在遍历上,这就是为什么它被视为404。如果您担心这些错误会被吞没,您应该在您的自定义代码中处理它们。通常简单的原因是您的视图或模板代码中缺少变量,并且它稍后会被转换为404。我几乎认为这是一个bug,因为它对不知道这个Zope特性的新开发人员来说调试变得困难和不可能。最好让Python DEVs切换@属性异常也变成AdvestError特性,然后。P