pickle.load上的ImportError for object

时间:2015-07-07 13:51:08

标签: python object pickle importerror

尝试使用pickle加载文件时,我收到ImportError: No module named application_mgmt

奇怪的是,同一个文件可以加载没有问题形成一个不同的功能,他们甚至都使用相同的get_file方法和所有。同样奇怪的是,我可以从函数中加载任何其他文件。

我尝试将这些功能移到另一个类/文件中。清除并重新填充已保存的文件但似乎没有任何效果。

保存文件中的对象:

 class Application():

        def __init__(self,name,focus=False):
            self.name = name
            self.focus = focus

            self.prod_score = 5
            self.display_name = name
            self.color = "none"

导致错误的函数:

  def check_meta_info(self, app_name):
            self.get_file("saved_meta_data")

文件处理功能:

 def get_file(self, file_name):
        path = "back/saved_data/%s" % (file_name)

        try:
            with open(path,'rb') as saved_file:
                saved_list = pickle.load(saved_file)
                saved_file.close()
                return saved_list

        except IOError:
            #stuff

日志:

Traceback (most recent call last):
  File "<stdin>", line 400, in <module>
  File "<stdin>", line 221, in app_meta_info
  File "<stdin>", line 313, in check_meta_info
  File "<stdin>", line 358, in get_file
ImportError: No module named application_mgmt

shell returned 1  

功能有效,但调用相同的文件类:

 def add_meta_info(self, new_application):

        new_meta = Application(new_application)  # creates obj

        saved_meta_info = self.get_file("saved_meta_data")

        for metas in saved_meta_info:
            if new_meta.name == metas.name:
                return False


        saved_meta_info.append(new_meta)
        self.save_file(saved_meta_info,"saved_meta_data")
        del new_meta

文件结构:

.
├── active_screen.glade
├── active_screen.py
├── back
│   ├── application_mgmt.py
│   ├── application_mgmt.pyc
│   ├── bash
│   │   ├── get_active_window.sh
│   │   ├── prosessScript.sh
│   │   └── test_lock.sh
│   ├── bash_schedular.py
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── saved_data
│   │   ├── first_time_builder.py
│   │   ├── saved_active_data
│   │   ├── saved_background_data
│   │   ├── saved_ignore_data
│   │   └── saved_meta_data          < HIM

1 个答案:

答案 0 :(得分:1)

查看错误日志,我认为您的问题与pickle加载无关。 我不知道他为什么要导入application_mgmt - get_file的哪一行是358? - 但可能由以下原因导致ImportError:

  • 忘记后面文件夹中的__init__文件。没有它,文件夹是不可导入的。如果缺少,请创建一个空的。

  • Python路径问题:要检查是否存在问题,请尝试在get_file方法的开头添加它。

    import sys sys.path.append('/path/to/the/back/module/')

  • 循环导入:如果在application_mgmt.py和其他文件之间找到任何内容,请尝试重构代码以避免它们。

希望这有帮助。