【问题标题】:python import statement results in NoneTypepython import 语句导致 NoneType
【发布时间】:2012-01-03 20:24:37
【问题描述】:

好的,下面是让我疯狂一整天的事情的简化版本:

models.py:

from django.template.defaultfilters import slugify
class MyModel(models.Model):
    ....

    def populate_property(self):
        self.property = slugify('string of text')

然后我的视图调用populate_property(),但我收到NoneType object is not callable 错误。

但是,如果我添加一个内联 importslugify,那么它可以工作。

这是已经工作了很长时间的代码,所以我现在不知所措。

PYTHONPATH,但它看起来没问题,并且环境是使用 buildout 创建的

任何帮助将不胜感激......

【问题讨论】:

    标签: python django import


    【解决方案1】:

    刚刚解决了一个类似的问题,听起来您的代码中有一个循环引用(这个文件导入了从这个文件导入的东西)。将导入放在 populate_property 中没有任何害处。

    【讨论】:

    • 是真的,这意味着循环导入是在 django.template.defaultfilters 的某个地方引起的,这对我来说听起来有点奇怪......他还说它发生在调用方法而不是加载模块时。
    • 实际上就是这样。谢谢,汤姆。我在不需要的地方使用了通配符,这几乎杀死了所有东西。 I should know better.
    【解决方案2】:

    根据您发布的代码,应该没有问题。我能想到的唯一导致您提到的错误的是,您在某个时候更改了slugify 的值。当打算使用== 或类似的东西时,很可能是意外使用了=

    最好的检查方法是保持其余代码不变,但除了现在的导入之外,还要添加from django.template import defaultfilters。然后,将有问题的特定代码行更改为:

    def populate_property(self):
        self.property = defaultfilters.slugify('string of text')
    

    如果可行,则尝试追踪 slugify 被重新分配的位置。

    【讨论】:

    • 感谢您的建议,克里斯。 defaultfilters 也未定义。事实上,大多数非内联包含的东西都是未定义的。
    • 只有 Django 进口吗?也许 Django 包中出了问题——重新安装它可能会有所帮助。如果这种行为也发生在 stdlib 导入中,那么您的整个环境可能会被破坏。你有另一个系统可以测试你的代码吗? (或者如果您正在使用它,请尝试创建一个新的 virtualenv)。
    【解决方案3】:

    如果您使用的是 Django import signal 引起的循环导入。 我总是遇到奇怪的情况,它在本地工作,可能在开发服务器上,可能不在生产服务器上......

    【讨论】:

      猜你喜欢
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多