3

我正在尝试使用 whoosh 后端设置干草堆。当我尝试生成索引[或任何索引命令]时,我收到:

TypeError: Item in ``from list'' not a string

如果我完全删除了我的 search_indexes.py 我得到了同样的错误[所以我猜它根本找不到那个文件]

什么可能导致此错误?它设置为自动发现,我确定我的应用程序已安装,因为我目前正在使用它。

完整追溯:

    Traceback (most recent call last):
  File "./manage.py", line 17, in <module>
    execute_manager(settings)
  File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 362, in execute_manager
    utility.execute()
  File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 303, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 257, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 67, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/Users/ghostrocket/Development/Redux/.dependencies/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Users/ghostrocket/Development/Redux/.dependencies/haystack/__init__.py", line 124, in <module>
    handle_registrations()
  File "/Users/ghostrocket/Development/Redux/.dependencies/haystack/__init__.py", line 121, in handle_registrations
    search_sites_conf = __import__(settings.HAYSTACK_SITECONF)
  File "/Users/ghostrocket/Development/Redux/website/../website/search_sites.py", line 2, in <module>
    haystack.autodiscover()
  File "/Users/ghostrocket/Development/Redux/.dependencies/haystack/__init__.py", line 83, in autodiscover
    app_path = __import__(app, {}, {}, [app.split('.')[-1]]).__path__
TypeError: Item in ``from list'' not a string

这是我的 search_indexes.py

from haystack import indexes
from haystack import site
from myproject.models import *

site.register(myobject)
4

4 回答 4

8

我刚刚遇到了相同的 TypeError 消息,但堆栈完全不同。

对整个错误消息的搜索带来了两个结果:this question,以及 Python 的 import.c 的源代码。因此,经过一番挖掘,我发现当__import__内置函数传递一个不是字符串的导入名称时会导致这个特定错误。

重要的词是字符串- 即。一个str对象。其他任何内容(例如unicode)都将被拒绝并出现此处描述的错误。

所以解决方案是:无论您将模块/成员名称传递给将动态导入它的东西,请确保它是 astr而不是 a unicode

失败:

__import__('mylib.foo', globals(), locals(), [u'bar'])

工作:

__import__('mylib.foo', globals(), locals(), ['bar'])
__import__(u'mylib.foo', globals(), locals(), ['bar'])

当然,这可能只与 Python 2.x 相关,因为 3.x 对字符串/unicode 的处理方式不同。

于 2010-04-21T14:09:43.510 回答
2

就我而言,这发生在我将 django-tastypie 升级到 v0.10 之后。作为 Py3 移植工作的一部分,from __future__ import unicode_literals被添加到迁移的顶部。

在每个 sweetpie 迁移文件中注释掉该行之后,我的迁移运行正常。

我发现令人费解的是,昨天使用新的 sweetpie 版本(在一个共享相同 virtualenv 的单独项目中),美味派迁移运行良好。那是另一天的谜。

于 2013-08-08T17:13:17.807 回答
1

您似乎遇到了两个问题。

第一个是产生那个的那个TypeError。它发生在 Haystack 在您列出的每个应用程序中搜索INSTALLED_APPSsearch_indexes.py 时(因为您正在自动注册)。我不确定到底是什么问题,但我会首先在您的项目中搜索from list并仔细检查您的代码。我以前没有遇到过这种异常,但是如果在您编写的代码中发生这种情况,您应该在您的问题中发布任何相关部分

我相信无论是否使用 search_indexes.py 文件都会出现相同错误的原因是因为它从未达到尝试执行该文件中的代码的地步。

也就是说,该文件中应该发生更多事情(这是第二个问题)。您必须创建一个索引类(继承自 haystack.indexes.SearchIndex)并将其注册到模型中。有关说明和示例,请参阅文档的此部分。

我也会在django-haystack Google Group中问这个问题,因为 haystack 的作者和其他用户会在那里看到它,而且他们往往会非常有帮助。

于 2009-12-29T01:55:01.950 回答
1

昨晚我在一个 5 分钟前工作的代码库上遇到了同样的错误,没有进行任何修改。就我浏览我的 git repo 而言,之前运行的代码导致了同样的错误。我将我的 unicode 值转换为字符串,它消除了问题,但没有解决根本原因。

所以我发现如果:

  1. 它不是来自我的代码
  2. 它是在 python 函数导入中提出的
  3. 我的 python 和代码库都没有改变

问题必须出在位代码中。我删除了应用程序中的每个 .pyc 和 .pyo 文件。并且错误消失了。

删除 .py- 文件:

find . -name "*.pyc" -exec rm -f {} \;
find . -name "*.pyo" -exec rm -f {} \;
于 2013-05-05T12:07:59.823 回答