带有unpickling的Flask属性错误

时间:2017-10-18 16:17:12

标签: python flask pickle

我正在尝试加载一个pickle并通过Flask应用程序显示一些数据。我所遵循的结构如下。

package1.py

class myclass:
    #do something
m = myclass()
pickle.load(m,filehandle)

package2.py

from package1 import myclass
def query_processor(params):
    x = pickle.load(filehandle)
    #do stuff on x using params
    return results
if __name__ == "__main__":
    print(query_processor(params)) #Works as expected

flaskapp.py

import package2

@app.route("/", methods=['GET', 'POST'])
def hello():
    result = package2.query_processor(params)
    return render_template(template_name,form=form,msg=result)

在flaskapp内部,我收到如下错误:

AttributeError: Can't get attribute 'myclass' on <module '__main__' from <flask_path>

有没有办法解决这个问题?有人可以解释为什么我有这个错误吗?

1 个答案:

答案 0 :(得分:1)

为了解开这个问题,你需要拥有与你腌制对象的时间点相同的模块和包结构。

您的异常表明您在作为程序运行的模块中定义了类,因此它没有* .py文件的名称,而是名称__main__。当尝试从Flask应用程序中取消它时,另一个模块是__main__模块,该模块不包含myclass类对象。

因此,最简单的修复方法是在创建 pickle时使用另一个模块作为程序。该模块必须从package1导入myclass或至少package1