【问题标题】:Pyramid config loading error金字塔配置加载错误
【发布时间】:2011-08-11 19:40:32
【问题描述】:

我在 Pyramid 中创建应用时遇到了问题。当我尝试通过贴纸服务时,我得到:

  File "/home/viraptor/blah/blah/__init__.py", line 23, in main
    return config.make_wsgi_app()
  File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 916, in make_wsgi_app
    self.commit()
  File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 491, in commit
    self._ctx.execute_actions()
  File "/home/viraptor/pyramid/lib/python2.6/site-packages/zope/configuration/config.py", line 626, in execute_actions
    callable(*args, **kw)
  File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 1291, in register
    derived_view = deriver(view)
  File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2681, in __call__
    self.mapped_view(view))))))))
  File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2624, in inner
    wrapped_view = wrapped(self, view)
  File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2693, in mapped_view
    mapped_view = mapper(**self.kw)(view)
  File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2860, in __call__
    view = self.map_nonclass(view)
  File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2876, in map_nonclass
    ronly = requestonly(view, self.attr)
  File "/home/viraptor/pyramid/lib/python2.6/site-packages/pyramid/config.py", line 2966, in requestonly
    if len(args) - len(defaults) == 1:
zope.configuration.config.ConfigurationExecutionError: <type 'exceptions.TypeError'>: object of type 'NoneType' has no len()
  in:
  ('/home/viraptor/blah/blah/__init__.py', 22, 'main', "config.add_route('customer', '/customer/{customer_id}', view='blah.views.customer.view', view_renderer='customer_view.mak', view_permission='view', traverse='/customer/{customer_id}')")

这可能是什么原因?最近我什至没有更改该配置,只更改了应用程序的其余部分。

【问题讨论】:

  • 您没有包含实际异常,仅包含堆栈跟踪。没有人知道现在发生了什么,只知道在哪里...... :-)
  • @Martijn Pieters - Python 在最后打印异常 - 它就在那里。这是 ConfigurationExecutionError。
  • 啊,我的错,我的 iPhone 上的移动视图没有显示整个文本,而且我没有迹象表明它更长。道歉!

标签: python configuration pyramid


【解决方案1】:

我怀疑您遇到了 Pyramid 较新版本中修复的错误;您的回溯表明argsdefaultsNone,但除非args 不是None,否则无法到达该代码分支,从而留下defaultsNone 的可能性。我发现以下对 Pyramids 的提交为 defaults 添加了一个特定的测试为 None:

https://github.com/Pylons/pyramid/commit/f168197609169fb01b65adeb3eb59d069000fe2c

我说你有一个没有任何默认值的方法,只有一个请求参数(method(self, request),解决方法是添加一个带有默认值的关键字参数(method(self, request, dummy=None)

免责声明:还没有机会使用 Pyramid,所以我的分析纯粹基于 Pyramid 代码库。

【讨论】:

    【解决方案2】:

    config.add_route 仅接受 1 个位置参数,您的第二个参数应与 pattern 一起使用关键字。

    其次,我认为routetraverse 不可能有相同的模式。使用traverse 关键字,您可以定义root 应该从哪里开始。在Configurator API documentation中有解释。

    虽然引发的错误异常可能会提供更多信息。

    【讨论】:

    • 在混合方法中使用树时,在 URL Dispatch 中具有与 pattern= 参数相似的 traverse= 是完全有效的。此外,虽然模式是 add_route 中的关键字参数,但基本上所有文档都将其视为位置参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2014-08-12
    • 1970-01-01
    • 2019-09-14
    • 2017-06-13
    • 1970-01-01
    相关资源
    最近更新 更多