1

我想在下面的 python 代码中限制行数,如果我们的行数少于 200 则执行代码,如果超过 200 行则不运行代码。使用下面的代码,我正在打印行数,但 if 子句限制行给了我错误。

TypeError:视图函数没有返回有效响应。该函数要么返回 None ,要么在没有 return 语句的情况下结束。

错误:索引:/ CreateStudent [GET] 上的异常

我在浏览器中看到的内容:服务器遇到内部错误,无法完成您的请求。服务器过载或应用程序出错。

@app.route('/CreateStudent', methods=['GET','POST'])
    def upload_student():
        
       if request.method == 'POST':
            csv_file = request.files['file']
            if not csv_file:
                return render_template('error.html')
            csv_file = TextIOWrapper(csv_file, encoding='utf-8')
            csv_reader = csv.reader(csv_file)
            lines= list(csv_reader)
            print(lines)
            if len(lines) < 200:
                for row in lines:
                    if len(row)==4:
                        name=row[0]
                        familyname=row[1]
                        age=row[2]
                        job=row[3]
                        create_student(name,familyname,age,job)
                        time.sleep(2)
                return render_template('success.html')
            return render_template('CreateStudent.html')

当我还想打印行时,我看到我的结果如下: [['Sara','Jacky','22','engineer']] 为什么我的结果中有这个 2 [[]],是因为名单?

4

1 回答 1

1

在这里,我稍微修改了您的代码,并在我进行修改的地方添加了注释:

if request.method == 'POST':
    csv_file = request.files['file']
    if not csv_file:
        return render_template('error.html')
    csv_file = TextIOWrapper(csv_file, encoding='utf-8')
    csv_reader = csv.reader(csv_file)
    lines = list(csv_reader)            # <--- read the file into `lines`

    if len(lines) < 200:
        for row in lines:               # <-- we're iterating over `lines` now
            if len(row)==4:
                create_Student(*row)    # <-- no need to extract to variables, simple `*` is enough
        return render_template('success.html')

    return render_template('CreateStudent.html')    # <-- this is returned in case len(lines) >= 200
于 2020-07-12T16:38:44.270 回答