【问题标题】:ImportError on pickle.load for object对象的 pickle.load 上的 ImportError
【发布时间】:2015-07-07 13:51:07
【问题描述】:

当尝试使用 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

【问题讨论】:

    标签: python object pickle importerror


    【解决方案1】:

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

    • 忘记了 back 文件夹中的 __init__ 文件。没有它,文件夹就无法导入。如果缺少,请创建一个空的。

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

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

    • 循环导入:如果您在 application_mgmt.py 和另一个文件之间找到任何 - 请尝试重构代码以避免它们。

    希望这会有所帮助。

    【讨论】:

    • 谢谢这个问题实际上是一个路径问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2019-04-03
    相关资源
    最近更新 更多