python - 在 Flask 应用程序中运行时函数不会返回元组/列表
问题描述
背景
我正在开发一个简单的 Flask 应用程序。我有一个应该返回一个元组的函数:
import numpy as np
import pandas as pd
def extract_data(path: str) -> Tuple[np.ndarray, int, pd.DataFrame]:
csv = pd.read_csv(path):
data = csv["data"].to_numpy()
data[np.isnan(data)] = 0
data = np.expand_dims(data, axis=0)
bounds = len(csv["bounds"]) - 1
data = data[data != 0]
return data, bounds, csv
问题和尝试
如果我在 Flask 之外运行它,它可以正常工作(返回 tuple (data, bounds, csv)
)。但是,当我在 Flask 中运行它时,它给了我错误 ValueError: too many values to unpack (expected 3)
。当我在 Flask 中调试并打印函数返回的值时,它只打印以下值data
:
>>> print(extract_data(os.path.join(app.instance_path, 'uploads', filename)))
[0.0476 0.07544 0.27416 0.04569 0.01261]
但是,如果我运行extract_data
Flask 调试器中的步骤,它也可以正常工作。我不认为它extract_data
本身有问题。我试过用逗号包装元组,将元组定义为变量并返回变量,并删除类型提示。我可以在 Flask 之外使用具有相同数据的此函数并返回预期的元组。文件上传似乎工作得很好,csv
看起来像预期的那样。
编辑:我也试过返回一个列表并得到同样的错误。我还尝试将列表分配给一个变量并返回该变量并得到相同的错误。
相关信息
data
是一个 numpy 数组:
[0.0476 0.07544 0.27416 0.04569 0.01261]
这里是csv
:
bounds data
0 84 0.04760
1 2483 0.07544
2 4540 0.27416
3 13822 0.04569
4 20075 0.01261
5 23400 NaN
并且n_intervals
是一个 int (5)。
这是 Flask 应用程序的相关部分:
from flask import Flask, render_template
from werkzeug.utils import secure_filename
from app import app
from app.forms import MyForm
@app.route('/upload', methods = ['GET', 'POST'])
def upload():
form = MyForm()
if form.validate_on_submit():
f = form.csv.data
filename = secure_filename(f.filename)
f.save(os.path.join(app.instance_path, 'uploads', filename))
data, bounds, csv = extract_data(os.path.join(app.instance_path, 'uploads', filename))
return render_template('result.html')
return render_template('upload.html', form=form)
MyForm
只是一个继承自FlaskForm
文件flask_wtf
上传的类。
我对此感到很困惑,所以任何帮助将不胜感激。
解决方案
似乎 Flask 要求您在sys.path.insert
.
例如:
sys.path.insert(0, "/full/path/goes/here")
并不是
sys.path.insert(0, "~/path/goes/here")
或者
sys.path.insert(0, "../path/goes/here")
指定绝对路径时,该函数可以正确运行。
推荐阅读
- manim - manim TextMobject 不适用于异常“转换为 dvi 的乳胶错误
- javascript - TypeError:this.auth.signInWithEmailAndPassword 不是函数
- django - 在测试期间启动新的 django 进程时,它使用了错误的数据库
- r - 使用 read_excel() 时将 ... 设置为 na
- c# - 1080*1920分辨率系统如何开发win表格应用
- python - 在已排序的字典中成对减去两个值
- java - 保存活动状态 Android studio
- c# - C# - 对 WebApi 控制器进行单元测试
- jquery - Bootstrap modal 不显示在引导轮播中,除了活动轮播项目
- android - 我们如何在 Android Q 中访问扩展文件?